面试题62. 圆圈中最后剩下的数字
思路:f(n,m) = (f(n-1,m)+m)%n。约瑟夫问题
写法1
class Solution {
public:
int lastRemaining(int n, int m) {
if(n==1) return 0;
return (lastRemaining(n-1, m)+m)%n;//f(n,m) = (f(n-1,m)+m)%n
}
};
写法二
class Solution {
public:
int lastRemaining(int n, int m) {
int res = 0;
for(int i=2;i<=n;i++)
res = (res+m)%i;
return res;
}
};