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;
    }
}
posted @ 2025-06-02 10:22  回忆、少年  阅读(7)  评论(0)    收藏  举报