圆圈中最后剩下的数字

题目: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]
posted @ 2016-12-15 12:05  BinWone  阅读(182)  评论(0编辑  收藏  举报