python异或运算

异或运算:

python自带的异或运算,可以分为三步:

  • 把两个十进制整数转换成二进制,并让其长度相同(短的前面补0);
  • 将两个二进制数按位异或(相同时为1,不同时为0);
  • 将结果转换回十进制数,输出。

一个小应用:用异或,不用额外变量交换两个整数。

a = a ^ b
b = a ^ b
a = a ^ b

LeetCode问题461:汉明距离

两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数xy,计算它们之间的汉明距离。

这题把xy求异或,将结果转换为二进制,统计其中1出现的次数即可。

完整代码:

class Solution:
    def hammingDistance(self, x: int, y: int) -> int:
        z = bin(x ^ y)[2:]
        count = 0
        for i in range(len(z)):
            if z[i] == '1':
                count += 1
        return count

运行结果:

LeetCode问题136:数组中唯一出现一次的元素

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

这题用异或,初始化re0,将re与数组中全部元素异或一遍,则最后得到的值就是只出现一次的元素。

完整代码:

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        re = 0
        for i in nums:
            re = re ^ i
        return re

运行结果:

LeetCode问题268:缺失数字

给定一个包含0, 1, 2, ..., nn个数的序列,找出0, ..., n中没有出现在序列中的那个数。

这题用异或,初始化c0,将c与数组中n个元素异或一遍,再与0nn+1个数全部异或一遍,则最后得到的值就是缺失的元素。

完整代码:

class Solution:
    def missingNumber(self, nums: List[int]) -> int:
        c = 0
        for i in range(len(nums)):
            c ^= nums[i]
            c ^= i
        c ^= i+1
        return c

运行结果:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容