Leetcode刷题(异或)

一、2980. 检查按位或是否存在尾随零

在这里插入图片描述
奇数二进制形式最右一位一定为1
偶数二进制形式最右一位一定为0
要存在尾随0至少要两个偶数进行或运算

代码

class Solution:
    def hasTrailingZeros(self, nums: List[int]) -> bool:
        cnt = 0
        for x in nums:
            if x%2==0:
                cnt+=1
        return True if cnt>=2 else False

二、1720. 解码异或后的数组

在这里插入图片描述
推导过程如下
x ^ x = 0
x ^ 0 = x
a ^ b = c
a ^ b ^ b = c ^ b
a = b ^ c

代码

class Solution:
    def decode(self, encoded: List[int], first: int) -> List[int]:
        n = len(encoded)+1
        ans= [0]*n
        ans[0] = first
        for i in range(1,n):
            ans[i] = encoded[i-1] ^ ans[i-1]
        return ans

三、2429. 最小异或

在这里插入图片描述

灵神代码

class Solution:
    def minimizeXor(self, num1: int, num2: int) -> int:
        c1 = num1.bit_count()
        c2 = num2.bit_count()
        while c2 < c1:
            num1 &= num1 - 1  # 最低的 1 变成 0
            c2 += 1
        while c2 > c1:
            num1 |= num1 + 1  # 最低的 0 变成 1
            c2 -= 1
        return num1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值