圆圈中最后剩下的数字

剑指 Offer 62. 圆圈中最后剩下的数字

题目

0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。

例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。



示例 1:

输入: n = 5, m = 3
输出: 3
示例 2:

输入: n = 10, m = 17
输出: 2


限制:

1 <= n <= 10^5
1 <= m <= 10^6

题解

DP

/**
 * @param {number} n
 * @param {number} m
 * @return {number}
 */
var lastRemaining = function(n, m) {
    let res = 0;

    // dp[i]: 还有i个人时最后剩下的数字索引号
    // dp[1] = 0
    // dp[i] = (dp[i-1]+m)%i
    for(let i=2;i<=n;i++){
        res = (res+m)%i;
    }

    return res
};

最后更新于