圆圈中最后剩下的数
题目描述
0, 1, ..., n-1这n个数字排成一个圆圈, 从数字0开始, 每次从这个圆圈里删除第m个数字. 求出这个圆圈里剩下的最后一个数字
第一次接触list容器, 迭代器也是第一次出现
主要是边界的判断
class Solution {
public:
int LastRemaining_Solution(int n, int m)
{
if ((n < 1) || (m < 1)) {
return -1;
}
list<int> numbers;
for (int i = 0; i < n; i++) {
numbers.push_back(i);
}
list<int>::iterator it = numbers.begin();
while (numbers.size() > 1) {
for (int i = 1; i < m; i++) {
it++;
if (it == numbers.end()) {
it = numbers.begin();
}
}
list<int>::iterator next = ++it; // 需判断next知否指向end
if (next == numbers.end()) {
next = numbers.begin();
}
--it;
numbers.erase(it);
it = next;
}
return *it;
}
};