圆圈中最后剩下的数字
题目
0、1…n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。
如0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3.
class Solution { public: int lastRemaining(int n, int m) { if (n < 1 || m < 1) { return -1; } list<int> l; for (int i = 0; i < n; ++i) { l.push_back(i); } list<int>::iterator it = l.begin(); while(l.size() > 1) { for (int i = 1; i < m; ++i) { ++it; if (it == l.end()) { it = l.begin(); } } list<int>::iterator it1 = ++it; if (it1 == l.end()) { it1 = l.begin(); } l.erase(--it); it = it1; } return *it; } };