810. 黑板異或遊戲
一個黑板上寫着一個非負整數數組 nums[i] 。小紅和小明輪流從黑板上擦掉一個數字,小紅先手。如果擦除一個數字後,剩餘的所有數字按位異或運算得出的結果等於 0 的話,當前玩家遊戲失敗。 (另外,如果只剩一個數字,按位異或運算得到它本身;如果無數字剩餘,按位異或運算結果爲 0。)
換種說法就是,輪到某個玩家時,如果當前黑板上所有數字按位異或運算結果等於 0,這個玩家獲勝。
假設兩個玩家每步都使用最優解,當且僅當小紅獲勝時返回 true。
示例:
輸入: nums = [1, 1, 2]
輸出: false
解釋:
小紅有兩個選擇: 擦掉數字 1 或 2。
如果擦掉 1, 數組變成 [1, 2]。剩餘數字按位異或得到 1 XOR 2 = 3。那麼小明可以擦掉任意數字,因爲小紅會成爲擦掉最後一個數字的人,她總是會輸。
如果小紅擦掉 2,那麼數組變成[1, 1]。剩餘數字按位異或得到 1 XOR 1 = 0。小紅仍然會輸掉遊戲。
提示:
1 <= N <= 1000
0 <= nums[i] <= 2^16
class Solution {
//小紅勝利,必須是異或=0,或者數組長度正好爲2的倍數
//數組的長度爲2的話,那麼一人一個,到先手的時候肯定是沒有數字了
public boolean xorGame(int[] nums) {
int x = 0;
for (int v : nums) x ^= v;
return x == 0 || nums.length % 2 == 0;
}
}