题目
圆圈中最后剩下的数,n个数从零开始去掉第m个数,然后从下一个数重新开始
思路
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
0 1 3 4 5 6 7
5 6 0 1 2 3 4
0 1 3 4 6 7
2 3 4 5 0 1
最后一轮只剩一个数,为所求,编号为0, f(1)=0
在倒数第二轮中编号为(0+m)%2, f(2)=(f(1)+m)%2
在倒数第三轮中编号为((0+m)%2+m)%3, f(3)=(f(2)+m)%3
…….
f(n) = (f(n-1)+m)%n,最终结果
两种实现方式:递归或者遍历
public int LastRemaining_Solution(int n, int m) {
if(n==0)
return -1;
int s = 0;
for(int i=2; i<=n; i++){
s = (s+m)%i;
}
return s;
}