直接模拟
根据题意依次异或。
class Solution {public int xorOperation(int n, int start) {int ans = 0;for (int i = 0; i < n; ++i){ans ^= start + i * 2;}return ans;}}
使用位运算性质
参考:https://leetcode-cn.com/problems/xor-operation-in-an-array/solution/o1-wei-yun-suan-by-bruceyuj/
class Solution {public int xorOperation(int n, int start) {// 最后一位// 如果start是偶数,则最后一位是0// 如果start是奇数,则最后一位是n个1异或int lastBit;if (start % 2 == 0) {lastBit = 0;} else {lastBit = n % 2;}// 右移后新序列的结果int newPart;// 如果start / 2 是偶数,// 如果n是偶数,则相当于n / 2 个1异或,// 如果n是奇数,则相当于n / 2 个1异或,然后再异或上start / 2 + n - 1if ((start / 2) % 2 == 0) {newPart = (n / 2) % 2;if (n % 2 == 1) {newPart ^= start / 2 + n - 1;}} else {// 如果start / 2 是奇数,则取出第一项start / 2,剩下的相当于start / 2 是偶数的情况newPart = ((n - 1) / 2) % 2;if ((n - 1) % 2 == 1) {newPart ^= start / 2 + n - 1;}newPart ^= start / 2;}return (newPart << 1) + lastBit;}}
