题目: 0~n-1的n个数排成一个圆圈,从0开始每次从这个圆圈删除第m个数字,然后从删除的数字的下一个数字开始继续直到剩最后1个数字位置。
方法1:用list模拟圆圈 的环形链表 每次循环到end()时都手动更新到begin() 效率不高
STL list使用https://blog.csdn.net/zhouzhenhe2008/article/details/77428743
class Solution {
public:
int LastRemaining_Solution(int n, int m)
{
if(n<1||m<1)
return -1;
list<int> circle;
for(int i=0;i<n;i++){
circle.push_back(i);
}
list<int>::iterator cur = circle.begin();
while(circle.size()!=1){
for(int i=0;i<m-1;i++){
cur++;
if(circle.end()==cur)
cur = circle.begin();
}
cur = circle.erase(cur);
if(cur == circle.end())
cur = circle.begin();
}
return *cur;
}
};