给你两个整数,nstart
数组 nums 定义为:nums[i] = start + 2*i(下标从 0 开始)且 n == nums.length
请返回 nums 中所有元素按位异或(XOR)后得到的结果。

示例 1

  1. 输入:n = 5, start = 0
  2. 输出:8
  3. 解释:数组 nums [0, 2, 4, 6, 8],其中 (0 ^ 2 ^ 4 ^ 6 ^ 8) = 8
  4. "^" 为按位异或 XOR 运算符。

示例 2

  1. 输入:n = 4, start = 3
  2. 输出:8
  3. 解释:数组 nums [3, 5, 7, 9],其中 (3 ^ 5 ^ 7 ^ 9) = 8.

示例 3

  1. 输入:n = 1, start = 7
  2. 输出:7

示例 4

  1. 输入:n = 10, start = 5
  2. 输出:2

提示

  • 1 <= n <= 1000
  • 0 <= start <= 1000
  • n == nums.length

题解

最近好久没有刷题了,偷懒了很久,可不能这样,继续努力啊!!!
这道题很简单,照着题意写就出来了。

JavaScript

  1. /**
  2. * @param {number} n
  3. * @param {number} start
  4. * @return {number}
  5. */
  6. var xorOperation = function(n, start) {
  7. let count=1
  8. let ans=start
  9. while (count<n){
  10. ans = ans^(start+2*count)
  11. count++
  12. }
  13. return ans
  14. };

上面写的还是有点复杂,可以写的更简单:

var xorOperation = function(n, start) {
    let ans = 0;
    for (let i = 0; i < n; ++i) {
        ans ^= (start + i * 2);
    }
    return ans;
};

复杂度分析

  • 时间复杂度:O(n)。这里用一重循环对 n 个数字进行异或。
  • 空间复杂度:O(1)。这里只是用了常量级别的辅助空间。

还有数学方法,但是看上去好麻烦….