1. 程式人生 > >LeetCode演算法題292:Nim遊戲解析

LeetCode演算法題292:Nim遊戲解析

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

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

示例:

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

這個題想通了就很簡答,首先如果要贏那麼最後只剩下4塊石頭給對方拿,那麼往回反推,永遠都是需要留下4塊石頭,也就是說想贏的話只要你拿完之後剩下的是4的倍數,那麼絕對可以贏,而如果一開始給的數就是4的倍數那麼就絕對贏不了了。
C++原始碼:

class Solution {
public:
    bool canWinNim(int n) {
        if (n%4==0)
            return false;
        else
            return true;
    }
};

python3原始碼:

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