leetcode 292 Nim遊戲(博弈論)

2021-09-26 13:31:40 字數 671 閱讀 1847

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

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

示例:輸入: 4

輸出: false

解釋: 如果堆中有 4 塊石頭,那麼你永遠不會贏得比賽;

因為無論你拿走 1 塊、2 塊 還是 3 塊石頭,最後一塊石頭總是會被你的朋友拿走。

solution:我們解決這種問題的思路一般都是反著思考:

如果我能贏,那麼最後輪到我取石子的時候必須要剩下 1~3 顆石子,這樣我才能一把拿完。

如何營造這樣的乙個局面呢?顯然,如果對手拿的時候只剩 4 顆石子,那麼無論他怎麼拿,總會剩下 1~3 顆石子,我就能贏。

如何逼迫對手面對 4 顆石子呢?要想辦法,讓我選擇的時候還有 5~7 顆石子,這樣的話我就有把握讓對方不得不面對 4 顆石子。

如何營造 5~7 顆石子的局面呢?讓對手面對 8 顆石子,無論他怎麼拿,都會給我剩下 5~7 顆,我就能贏。

這樣一直迴圈下去,我們發現只要踩到 4 的倍數,就落入了圈套,永遠逃不出 4 的倍數,而且一定會輸。所以這道題的解法非常簡單:

class solution 

};

學渣帶你刷Leetcode292 Nim 遊戲

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

Leetcode實戰 292 Nim 遊戲

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

LeetCode演算法題292 Nim遊戲解析

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