一、題目名稱java
Nim Game(尼姆博弈)函數
二、題目地址code
https://leetcode.com/problems/nim-game/遊戲
三、題目內容ip
英文:leetcode
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 stones. The one who removes the last stone will be the winner. You will take the first turn to remove the stones.rem
Both of you are very clever and have optimal strategies for the game. Write a function to determine whether you can win the game given the number of stones in the heap.get
For example, if there are 4 stones in the heap, then you will never win the game: no matter 1, 2, or 3 stones you remove, the last stone will always be removed by your friend.it
中文:io
你在和朋友玩「尼姆博弈」遊戲,假設在桌上有一堆石子,二人輪流從這堆石子中拿走1到3塊,取走最後一塊石子的人獲勝。這裏假定你是第一個取石子的人。
假設你和你的對手都瞭解這個遊戲的規則,寫一個函數斷定你是否能夠取勝。
例如,若是有4塊石頭,那麼你就是沒法取勝的。不管你拿走一、二、3塊石頭,你的朋友均可以經過將其他的石子所有取走獲勝。
四、解題方法1
網上已經有了不少對尼姆博弈問題的介紹,如維基百科頁面:
https://en.wikipedia.org/wiki/Nim
解題Java代碼以下:
/** * LeetCode 292 - Nim Game * @FileName Solution.java * @FileAuthor Tsybius * @DateTime 2015年12月20日 下午10:47:54 */ public class Solution { /** * 計算尼姆博弈當前狀況下是否必勝 * @param n * @return */ public boolean canWinNim(int n) { if (n <= 0) { return false; } else { return n % 4 != 0; } } }
另外一種解法是討論區大牛給出的方法,採用位運算解決本問題。
/** * LeetCode 292 - Nim Game * @FileName Solution.java * @FileAuthor Tsybius * @DateTime 2015年12月20日 下午10:54:12 */ public class Solution { /** * 計算尼姆博弈當前狀況下是否必勝 * @param n * @return */ public boolean canWinNim(int n) { if (n <= 0) { return false; } else { return n >> 2 << 2 != n; } } }
END