力扣链接:https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/
题目描述
0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。
例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。
思路:动态规划
由以上可得:f(n,m) = ( m%n + f(n-1, m) ) % n = (m + f(n-1, m)) % n 。特别地,当n为1时,f(1, m) = 0
完整的递推公式:
f(n, m) = 1 , (n = 1)
f(n, m) = (m + f(n-1, m)) % n , n > 1
代码:
/** * @param {number} n * @param {number} m * @return {number} */ var lastRemaining = function(n, m) { //f(1,m) let res = 0; //f(2,m) - f(n,m) for(let i = 2; i <= n; i++){ // res = (m%i + res) % i; res = (m + res) % i; } return res; };
时间复杂度: O(N)
空间复杂度:O(1)
原文:https://www.cnblogs.com/xintangchn/p/13342057.html