LeetCode 292 [Nim Game]

原題

經典尼姆游戲,桌上有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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容