劍指offer全集詳解python版——圓圈中最後剩下的數

題目描述:
有個遊戲是這樣的:首先,讓小朋友們圍成一個大圈。然後,他隨機指定一個數m,讓編號爲0的小朋友開始報數。每次喊到m-1的那個小朋友要出列並且不再回到圈中,從他的下一個小朋友開始,繼續0…m-1報數….這樣下去….直到剩下最後一個小朋友,求最後一個小朋友的編號

思路:

有一個不太容易發現的遞推關係:
約瑟夫環的公式是:
f(n, m) = 0         (n = 1)
f(n, m) = [f(n-1, m) +m] % n  (n > 1)

代碼:

# -*- 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]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章