力扣刷题-1486数组异或操作

一、题目

给你两个整数,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。

四、总结

虽然有些题目,不知道怎么做,按照题目的指示也是能够做出来的。所以,敲代码不要妄自菲薄,先按照自己的思路来,如果不行再找相关资料和方法解决问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值