70.圆圈中最后剩下的数字
0,1,…,n−1 这 n 个数字 (n>0) 排成一个圆圈,从数字 0 开始每次从这个圆圈里删除第 m 个数字。
求出这个圆圈里剩下的最后一个数字。
数据范围:
1≤n,m≤4000
样例:
输入:n=5 , m=3
输出:3
代码:
class Solution {
public int lastRemaining(int n, int m) {
//基本情况:当只有1个数字时,它就是最后剩下的数字(编号0)
if(n == 1)return 0;
//递归关系:
//f(n,m) = (f(n-1,m) + m) % n
//解释:
//1. 先计算n-1个数字时的解
//2. 然后加上m(因为每次从被删除的下一个位置开始重新计数)
//3. 最后对n取模(因为是环形结构)
return (lastRemaining(n-1,m)+m)%n;
}
}