题解 | #孩子们的游戏#
孩子们的游戏(圆圈中最后剩下的数)
https://www.nowcoder.com/practice/f78a359491e64a50bce2d89cff857eb6?tpId=265&tqId=39258&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FjudgeStatus%3D3%26page%3D1%26pageSize%3D50%26search%3D%26tpId%3D13%26type%3D265&difficulty=undefined&judgeStatus=3&tags=&title=
不在状态哎
class Solution {
public:
int LastRemaining_Solution(int n, int m) {
if (n == 1) {
return 0;
}
int x = LastRemaining_Solution(n - 1, m);
// 上一级删除的元素1`
return (m + x) % n;
}
};
迭代
class Solution {
public:
int LastRemaining_Solution(int n, int m) {
if (n == 0 || m == 0) {
return -1;
}
// 出圈后会重新编号
int res = 0;
// i个朋友
for (int i = 2; i <= n; ++i) {
// 从后往前退,已知只有一个时为0
// 使用数学表达式推出新旧编码之间的关系
// m m+1 m+2 (m-1)出列
// 0 1 2
// 这里求旧编号,目前是新编号
// 模上上一轮人数,防止溢出
res = (res + m) % i;
}
return res;
}
};