题解 | #环形链表的约瑟夫问题#
环形链表的约瑟夫问题
http://www.nowcoder.com/practice/41c399fdb6004b31a6cbb047c641ed8a
将1~n的元素保存到list中,定义一个函数,用来求解从iter位置出发走number步到达的位置,要注意达到list尾端的时候又重新回到list首端(成环). 然后每走number步删除相应的元素,直到只剩一个元素。
class Solution {
public:
/**
*
* @param n int整型
* @param m int整型
* @return int整型
*/
list<int>::iterator get_iter(list<int>& lst,list<int>::iterator iter,int number){
int num=number % lst.size();
while(num>0){
iter++;
if(iter==lst.end()) iter=lst.begin();
num--;
}
return iter;
}
int ysf(int n, int m) {
list<int> lst{};
for(int i=1;i<=n;i++) lst.push_back(i);
int number=1;
auto iter=lst.begin();
while(lst.size()>1){
int number=m-1;
iter=get_iter(lst,iter,number);
iter=lst.erase(iter);
if(iter==lst.end()) iter=lst.begin();
}
return *lst.begin();
}
};