剑指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]

猜你喜欢

转载自blog.csdn.net/weixin_43160613/article/details/85841813