思路:
這個題感覺更像是數學推導,這裡我注意到題目的「假設兩個玩家每步都是用最優解」,疑問這個最優解是個什麼意思。
首先我們來推導一下,假如去掉乙個數讓剩下的數異或為0,根據異或的性質:相同的數異或為0 and 任何數與0異或還是本身 可以得到下面的式子:
xorsum是所有數異或的結果,nums[i]在這是被去除掉的數
xorsum ^ nums[i] = 0 ,那麼我們考慮何為「每步都是最優解」,假如我們去掉乙個數 導致剩下的數異或為0,那麼他就輸了自然不是最優解,那麼我們就能有其他的選擇讓剩下的數異或不為0。所以如果滿足最優解的條件,並且為0,那麼自然就是所有的數去掉都會導致剩下的數異或為0,因此我們可以有下面的式子:
xorsum ^ nums[i] = 0 ; xorsum ^ nums [i-1] =0 xorsum ^ nums[i-2] =0
所以:xorsum ^ nums[i] ^ xorsum ^ nums [i-1] ^ xorsum ^ nums[i-2]....xorsum ^ nums[1] = 0
(xorsum ^ xorsum ^ ... ^ xorsum) ^ (num[1] ^ nums[2]... ^ nums[i]) = 0
(xorsum ^ xorsum ^ ... ^ xorsum) ^ xorsum = 0;
上述公式要為0,那麼xorsum的個數為偶數個,xorsum 個數和nums的元素個數相同因此我們可以得到如下結論:
若是先手贏,那麼要麼nums異或結果為0(因為到第一次先手之前就為0了,先手還沒動手呢,那自然先手贏了)或nums元素個數為偶數個。
那麼我們的**也就出來了,我們只需要判斷nums異或結果是否為0,和nums.size()是否為偶數即可。
class solution
if(xorsum==0) return true;
else if(n%2==0) return true;
return false;
}};
810 黑板異或遊戲
乙個黑板上寫著乙個非負整數陣列 nums i 小紅和小明輪流從黑板上擦掉乙個數字,小紅先手。如果擦除乙個數字後,剩餘的所有數字按位異或運算得出的結果等於 0 的話,當前玩家遊戲失敗。另外,如果只剩乙個數字,按位異或運算得到它本身 如果無數字剩餘,按位異或運算結果為 0。換種說法就是,輪到某個玩家時,...
37 黑板異或遊戲
題目描述 乙個黑板上寫著乙個非負整數陣列 nums i 小紅和小明輪流從黑板上擦掉乙個數字,小紅先手。如果擦除乙個數字後,剩餘的所有數字按位異或運算得出的結果等於 0 的話,當前玩家遊戲失敗。另外,如果只剩乙個數字,按位異或運算得到它本身 如果無數字剩餘,按位異或運算結果為 0。換種說法就是,輪到某...
數學 A100 LC 黑板異或遊戲(猜題意)
乙個黑板上寫著乙個非負整數陣列 nums i 小紅和小明輪流從黑板上擦掉乙個數字,小紅先手。如果擦除乙個數字後,剩餘的所有數字按位異或運算得出的結果等於 0 的話,當前玩家遊戲失敗。另外,如果只剩乙個數字,按位異或運算得到它本身 如果無數字剩餘,按位異或運算結果為 0。換種說法就是,輪到某個玩家時,...