[62]圆圈中最后剩下的数字
文章目录
题目
0, 1, …, n-1这n个数字(n>0)排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。
求出这个圆圈里剩下的最后一个数字。
思路
约瑟夫问题
递推关系
f
(
n
,
m
)
=
{
0
n
=
1
[
f
(
n
−
1
,
m
)
+
m
]
%
n
n
>
1
f(n, m)=\left\{\begin{array}{ll} 0 & n=1 \\ {[f(n-1, m)+m] \% n} & n>1 \end{array}\right.
f(n,m)={0[f(n−1,m)+m]%nn=1n>1
0 1 2 3 m-2 m-1 m m+1 n-1 【n个数,第m个下标为 m-1】
n-2 0 1 ...
n个数排列如图
下标从 0 开始,最后一个数为 n-1
去掉第m个数后的排列
代码
class Solution {
public:
int lastRemaining(int n, int m){
if(n==1) return 0;
return (lastRemaining(n-1,m)+m)%n;
}
};