1. 程式人生 > >LeetCode刷題記錄——第293題(Nim遊戲)

LeetCode刷題記錄——第293題(Nim遊戲)

題目描述

你和你的朋友,兩個人一起玩 Nim遊戲:桌子上有一堆石頭,每次你們輪流拿掉 1 - 3 塊石頭。 拿掉最後一塊石頭的人就是獲勝者。你作為先手。

你們是聰明人,每一步都是最優解。 編寫一個函式,來判斷你是否可以在給定石頭數量的情況下贏得遊戲。

示例:

輸入: 4
輸出: false
解釋: 如果堆中有 4 塊石頭,那麼你永遠不會贏得比賽;
因為無論你拿走 1 塊、2 塊 還是 3 塊石頭,最後一塊石頭總是會被你的朋友拿走。

思路分析

  • 我作為先手,優勝策略是:保證我拿之後剩下的全是4的倍數才能獲勝,如果我面對的是4的倍數個石頭的話,那麼我不可能獲勝因為我一次拿不完4個,對方通過後拿總可以將石頭的個數保持4的倍數,最後一輪輪到我拿的時候,還剩四個,我一次性拿不完,朋友穩贏。

程式碼示例

class Solution:
    def canWinNim(self, n):
        """
        :type n: int
        :rtype: bool
        """
        return n%4 != 0