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
class Solution:
def lastRemaining(self, n: int, m: int) -> int:
i, a = 0, list(range(n))
while len(a) > 1:
i = (i + m - 1) % len(a)
a.pop(i)
return a[0]
创新解法,找出递推公式
# -*- coding:utf-8 -*-
class Solution:
def LastRemaining_Solution(self, n, m):
# write code here
if n<1 or m<1:
return -1
res=0
for i in range(2,n+1):
res=(res+m)%i
return res