原題:你和你的朋友,兩個人一起玩 Nim 遊戲:桌子上有一堆石頭,每次你們輪流拿掉 1 - 3 塊石頭。 拿掉最後一塊石頭的人就是獲勝者。你作爲先手。
你們是聰明人,每一步都是最優解。 編寫一個函數,來判斷你是否可以在給定石頭數量的情況下贏得遊戲。
示例:
輸入: 4
輸出: false
解釋: 如果堆中有 4 塊石頭,那麼你永遠不會贏得比賽;
因爲無論你拿走 1 塊、2 塊 還是 3 塊石頭,最後一塊石頭總是會被你的朋友拿走。
思路:這個題目其實我感覺更像一個數學題目,題目給了我們一個例子,當輸入爲4時,必輸。
而這個4是很關鍵的,當輸入爲1,2或3時,我們發現你是必贏的。所以這個時候,我們思考,無論輸入是多少,無論哪種拿法,當你們桌上的石頭數小於或等於4時,誰贏誰輸就已經是定局了。而前面已經拿掉的石頭,無論它是怎樣的拿法,只要在雙方有相同的拿取次數時,都相當於一個新的Nim 遊戲。
當石頭數爲4的倍數的時候,第二個人完全可以使兩個人每次拿取的石頭數一共爲4,從而保證第二個人自己必贏。
當不爲4時,情況就很複雜了,但是你依舊存在
class Solution(object):
def canWinNim(self, n):
"""
:type n: int
:rtype: bool
"""
return False if n % 4==0 else True
贏的局面。