1. 程式人生 > >Leetcode 292. Nim Game 題解

Leetcode 292. Nim Game 題解

題目要求:Nim 遊戲規則如下,我和朋友一起玩拿石頭的遊戲,每人每次可以拿1-3塊石頭,拿到最後一塊石頭的人獲勝。在遊戲中,我是先拿石頭的那個人。給定石頭總數,判斷我是否可以獲勝。

思路:根據題目要求,“我和朋友都很聰明”,意味著我和朋友任何一個人輸掉遊戲,都是因為在這局遊戲中TA無論怎樣拿都不可能獲勝。也就是說給定石頭總數,在瞭解套路的情況下,輸贏是確定的。那麼接下來試著找找規律吧。石頭總數(記為N)。

N=1, 我先拿1個,我贏。(先手贏)

N=2,我先拿2個,我贏。(先手贏)

N=3,我先拿3個,我贏。(先手贏)

N=4, 無論我拿1-3個,都是對手贏。(後手贏)

N=5, 這是考慮下,我是第一個拿,我想贏,看一下N=1,2,3,4的情況,其中當N=4時,無論如何後手會贏,那麼只要我把現在的情況轉化為N=4,而且我後拿石頭,我就可以贏了。所以,我只拿1個。這時候情況就變成了,N=4,我要在朋友之後拿(後手拿),所以我會贏。(先手贏)

N=6, 同上,我會拿2個,這時候情況就又變成了N=4,我後手拿,所以我會贏。(先手贏)

N=7,同上,我會拿3個,這時候情況就又變成了N=4,我後手拿,所以我會贏。(先手贏)

N=8,考慮下,假設我拿1,2,3個,情況會變成N=5,6,7,都會是先手贏,但是我拿完之後就會變成後手,所以無論如何都會輸。(後手贏)

.....

總結下規律:

N=1 先手贏

N=2 先手贏

N=3 先手贏

N=4 後手贏

---------------------------

N=5 先手贏

N=6 先手贏

N=7 先手贏

N=8 後手贏

...

所以規律顯而易見了,只要石頭總數是4的倍數,我(先拿者)就會輸,其他情況都會贏。

python程式碼如下:

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


相關推薦

Leetcode 292. Nim Game 題解

題目要求:Nim 遊戲規則如下,我和朋友一起玩拿石頭的遊戲,每人每次可以拿1-3塊石頭,拿到最後一塊石頭的人獲勝。在遊戲中,我是先拿石頭的那個人。給定石頭總數,判斷我是否可以獲勝。 思路:根據題目要求,“我和朋友都很聰明”,意味著我和朋友任何一個人輸掉遊戲,都是因為在這

leetcode#292 Nim Game

!= nbsp clas 輸入 tar turn 每次 .com code 你和你的朋友,兩個人一起玩 Nim遊戲:桌子上有一堆石頭,每次你們輪流拿掉 1 - 3 塊石頭。 拿掉最後一塊石頭的人就是獲勝者。你作為先手。 你們是聰明人,每一步都是最優解。 編寫一個函數,來判斷

[LeetCode] 292. Nim Game

<span style="font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: rgb(255, 255, 255);">You are playing the followi

leetcode 292. Nim遊戲(Nim Game)

你和你的朋友,兩個人一起玩 Nim遊戲:桌子上有一堆石頭,每次你們輪流拿掉 1 - 3 塊石頭。 拿掉最後一塊石頭的人就是獲勝者。你作為先手。 你們是聰明人,每一步都是最優解。 編寫一個函式,來判斷你是否可以在給定石頭數量的情況下贏得遊戲。 示例: 輸入: 4 輸出:

LeetCode292. Nim Game

292. Nim Game Problem Example Solution Problem 你和朋友在玩一個遊戲,桌上有一堆石頭,你倆每次輪流拿走1到3個石頭,拿走最後剩餘石頭的就是贏家。你先開始拿。 你倆都很聰明,會選最

292. Nim Game (取物遊戲) by Python

number true object following 個數 ima def 就會 obj 292. Nim Game 題目: You are playing the following Nim Game with your friend: There is a heap

292. Nim Game(easy)

remove class turn move for pla num nim ble You are playing the following Nim Game with your friend: There is a heap of stones on the tabl

LeetCode--292--Nim遊戲

tar href 最優 bsp ref round 聰明人 false nbsp 問題描述: 你和你的朋友,兩個人一起玩 Nim遊戲:桌子上有一堆石頭,每次你們輪流拿掉 1 - 3 塊石頭。 拿掉最後一塊石頭的人就是獲勝者。你作為先手。 你們是聰明人,每一步都是最優解。 編

leetcode - 292 - Nim遊戲

class Solution:     def canWinNim(self, n):         """         :type n: int      

Leetcode--------292. Nim遊戲

你和你的朋友,兩個人一起玩 Nim遊戲:桌子上有一堆石頭,每次你們輪流拿掉 1 - 3 塊石頭。 拿掉最後一塊石頭的人就是獲勝者。你作為先手。 你們是聰明人,每一步都是最優解。 編寫一個函式,來判斷你是否可以在給定石頭數量的情況下贏得遊戲。 示例: 輸入: 4 輸出:

leetcode 292. Nim遊戲 【easy】

題目:         你和你的朋友,兩個人一起玩 Nim遊戲:桌子上有一堆石頭,每次你們輪流拿掉 1 - 3 塊石頭。 拿掉最後一塊石頭的人就是獲勝者。你作為先手。 你們是聰明人,每一步都是最優解。 編寫一個函式,來判斷

LeetCode 292. Nim遊戲 c++&java

你和你的朋友,兩個人一起玩 Nim遊戲:桌子上有一堆石頭,每次你們輪流拿掉 1 - 3 塊石頭。 拿掉最後一塊石頭的人就是獲勝者。你作為先手。你們是聰明人,每一步都是最優解。 編寫一個函式,來判斷你是否可以在給定石頭數量的情況下贏得遊戲。示例:輸入: 4 輸出: false

Nim Game Leetcode

規劃 att removes bsp rate class function who have You are playing the following Nim Game with your friend: There is a heap of stones on the

LeetCode-Nim Game

Description: You are playing the following Nim Game with your friend: There is a heap of stones on the table, each time one of you

leetcode Nim Game

leetcode Nim Game . https://leetcode.com/problems/nim-game/ 尼姆遊戲,自己先手,每次可以取1-3塊石子 解題思路: n%4==0 自己輸,n%4!=0 別人輸 public boolean canWinNim(int

LeetCode刷題Easy篇 Nim Game

題目 You are playing the following Nim Game with your friend: There is a heap of stones on the table, each time one of you take turns to remove 1 to 3

LeetCode演算法題-Nim Game(Java實現)

這是悅樂書的第203次更新,第213篇原創 01 看題和準備 你和你的朋友正在玩下面的Nim遊戲:桌子上有一堆石頭,每次你輪流去除1到3塊石頭。 移除最後一塊石頭的人將成為贏家。 你是第一個取出石塊的。 你們兩個都非常聰明,並且擁有最佳的遊戲策略。 編寫一個函式來確定你是否

#leetcode#Nim Game

You are playing the following Nim Game with your friend: There is a heap of stones on the table, each time one of you take turns to remove 1 to

【演算法與資料結構相關】【LeetCode】【292 Nim遊戲】【Python】

題目: 你和你的朋友,兩個人一起玩 Nim遊戲:桌子上有一堆石頭,每次你們輪流拿掉 1 - 3 塊石頭。 拿掉最後一塊石頭的人就是獲勝者。你作為先手。你們是聰明人,每一步都是最優解。 編寫一個函式,來判斷你是否可以在給定石頭數量的情況下贏得遊戲。 示例: 輸入: 4 輸出

LeetCode 55. Jump Game (跳躍遊戲)

mat col lean osi pub 情況 you track rip Given an array of non-negative integers, you are initially positioned at the first index of the ar