题目传送门
题解
- 解法一:暴力
- 解法二:递归
设表示题意所求。则首先明确
(一个人肯定就是自己了)
采用自底向上的方式,设
当前长度为,那么本次会删除
的位置,变成长度为
。
而我们已经知道了,长度为的时候,最后一名所在位置是
所以 - 解法三:迭代
由解法二可知,递归可以转变为迭代求解。 - 最终:时间复杂度
,空间复杂度
AC-Code
class Solution {
public:
int LastRemaining_Solution(int n, int m) {
if(n <= 0) return -1;
int x = 0;
for(int i = 2; i <= n; ++i) {
x = (x + m) % i;
}
return x;
}
int dfs(int n, int m) {
if(n == 1) return 0;
int x = dfs(n - 1, m);
return (x + m) % n;
}
};