原題
經典尼姆游戲,桌上有n塊石子,每一每個選手可以拿1-3塊石子,交替進行,誰能拿到最后一塊誰獲勝。假設每一步,你們兩個人都會想到最優選擇。請寫出判斷函數。
樣例:
如果還剩4塊,該你選擇,無論如何對手都會贏。
解題思路
- 本題是腦筋急轉彎問題,可通過數學歸納,列舉。。。來找到規律
- 1個石子,先手全部拿走,先手勝;
- 2個石子,先手全部拿走,先手勝;
- 3個石子,先手全部拿走,先手勝;
- 4個石子,先手拿完,后手面對的是先手的第1,2,3情況,后手必勝;
- 5個石子,先手拿走1個讓后手面對第4種情況,后手必敗;
- 6個石子,先手拿走2個讓后手面對第4種情況,后手必敗;
……
容易看出來,只有當出現了4的倍數時,后手每次拿走的石頭數量與先手相加都等于4,最終會把第四種情況留給先手,從而獲勝。其余情況先手都可以獲勝。 - 代碼非常簡單
完整代碼
class Solution(object):
def canWinNim(self, n):
"""
:type n: int
:rtype: bool
"""
return False if n % 4 == 0 else True