LeetCode#262 Nim遊戲 Java

@author: sdubrz
@date: 2020.04.22
題號: 292
題目難度: 簡單
考察內容: 腦筋急轉彎兒
原題鏈接 https://leetcode-cn.com/problems/nim-game/
題目及官方解法的著作權歸領釦網絡所有,商業轉載請聯繫官方授權,非商業轉載請註明出處。
解題代碼轉載請聯繫 lwyz521604#163.com

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

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

示例:

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

通過次數44,393 提交次數63,737

解法

我們只要列出前幾個數的情況,就可以發現其中的規律。在下圖中,用 1 表示能贏,用 0 表示輸。

Nim遊戲

  • n=1時,直接拿1個,必贏。
  • n=2時,直接拿2個,必贏。
  • n=3時,直接拿3個,必贏。
  • n=4時,無論拿1~3個多少,對方都可以將剩下的都拿走,因而必輸。
  • n=5時,只需要拿1個,對方就必須面對 n=4 的局面,對方必輸。
  • n=6時,只需要拿2個,對方就必須面對 n=4 的局面,對方必輸。
  • n=7時,只需要拿3個,對方就必須面對 n=4 的局面,對方必輸。
  • n=8時,無論拿13個多少,對方都會具有57中的情況,對方必勝。

因而規律已經出來了,只要石頭的個數能被4整除,我方必輸,否則都有必勝的把握。

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

提交結果:

執行結果: 通過 顯示詳情
執行用時 : 0 ms, 在所有 Java 提交中擊敗了 100.00% 的用戶
內存消耗 : 36.5 MB, 在所有 Java 提交中擊敗了 6.67% 的用戶

比較讓人鬱悶的是,內存只排6.67%

本文是在 LeetCode 刷題的筆記,如有不當之處,歡迎通過留言或QQ指出。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章