剑指 Offer 62. 圆圈中最后剩下的数字
约瑟夫问题
class Solution {
public:
int ysf(int n, int m, int k)
{
if(k == 1) // 只出局一个人,就是m - 1
return (m - 1 + n) % n;
return (ysf(n - 1, m, k - 1) + m) % n; // 出局一个人之后都是从n - 1 个人中出局 k - 1个人
}
int lastRemaining(int n, int m) {
return ysf(n, m, n);
}
};