思路:
第一个要删除的是m-1,第二个要删除是2m-1,第三个要删除是3m-1,由于有n的限制即用求模来解决。
算法中i=(m+i-1)%len(res),其中为何要减一,是因为已经从res删除了一个数,res后面的数下标会在原来的基础上减少1,所以2m-1的下标变成了2m-2,从而整个算法就可以理解了。
# -*- coding:utf-8 -*-
class Solution:
def LastRemaining_Solution(self, n, m):
# write code here
if not m or not n:
return -1
res = range(n)
i = 0
while len(res)>1:
i = (m+i-1)%len(res)
res.pop(i)
return res[0]