圆圈中最后剩下的数字
题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。
Solution
# -*- coding:utf-8 -*-
class Solution:
def LastRemaining_Solution(self, n, m):
# write code here
'''if n < 1 or m < 1:
return -1
last = 0
for i in range(2, n+1):
last = (last + m) % i
return last'''
if n < 1 or m < 1:
return -1
idList = [i for i in range(n)]
j = 0
while len(idList) > 1:
for i in range(m):
j += 1
if j == len(idList):
j = 0
if j > 0:
j -= 1 # 因为当报到第m个数时,j继续自加了一次
idList.pop(j)
elif j == 0: # 当要删除的是最后一个节点时,需要特殊处理一下
idList.pop()
return idList[0]