一、题目
给你两个整数,n 和 start 。
数组 nums 定义为:nums[i] = start + 2*i(下标从 0 开始)且 n == nums.length 。
请返回 nums 中所有元素按位异或(XOR)后得到的结果。
示例 1:
输入:n = 5, start = 0
输出:8
解释:数组 nums 为 [0, 2, 4, 6, 8],其中 (0 ^ 2 ^ 4 ^ 6 ^ 8) = 8 。
"^" 为按位异或 XOR 运算符。
二、个人思路
思路:审题两遍,才弄懂题意,由于很久没敲代码,异或操作都已忘记,而且,异或操作只做过二进制的,这类数据进行异或操作不会。在不知道原理的情况下,按照题意自己尝试用for循环实现上述操作。
code1:
class Solution(object):
def xorOperation(self, n, start):
"""
:type n: int
:type start: int
:rtype: int
"""
result = start
for i in range(1,n):
result = result ^ (start + 2*i)
return result
小结:虽然不知道非二进制数如何进行异或操作的,但是按照题目的意思还是做出来了。
三、拓展
python中,非二进制数字的异或操作原理:
1、将两个非二进制的数转为二进制,再进行异或操作。
2、异或的直接操作啦。
【发现一些好玩的】:
异或操作还可以实现不采用第三变量的前提下,实现两个变量值的互换。如下,引用"小米里的大麦"博主的内容,方便与我类似的初学者参考和开阔视野。
int main()
{
int a = 3;
int b = 5;
printf("a=%d b=%d\n", a, b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a=%d b=%d\n", a, b);
return 0;
}
现在我们来逐步分析这段代码:
初始化:
a = 3,其二进制表示为 0011
b = 5,其二进制表示为 0101
第一步异或运算:
a = a ^ b
3 ^ 5 的二进制表示为 0011 ^ 0101,结果为 0110,即十进制的6。
因此,a 的值现在变成了6。
第二步异或运算:
b = a ^ b
此时 a 已经被更新为6,b 仍然为5。
所以计算 6 ^ 5 的二进制表示为 0110 ^ 0101,结果为 0011,即十进制的3。
因此,b 的值现在变成了3。
第三步异或运算:
a = a ^ b
此时 a 为6,而 b 已经被更新为3。
计算 6 ^ 3 的二进制表示为 0110 ^ 0011,结果为 0101,即十进制的5。
因此,a 的值现在变成了5。
四、总结
虽然有些题目,不知道怎么做,按照题目的指示也是能够做出来的。所以,敲代码不要妄自菲薄,先按照自己的思路来,如果不行再找相关资料和方法解决问题。