Java實現 LeetCode 810 黑板異或遊戲 (分析)

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;
    }
 
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章