你和你的朋友,兩個人一起玩 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 塊石頭,那麼你...