1. 程式人生 > >劍指Offer46:孩子們的遊戲(圓圈中最後剩下的數)

劍指Offer46:孩子們的遊戲(圓圈中最後剩下的數)

思路:

第一個要刪除的是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]