题目难度: 中等
今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号 算法精选 里回复
剑指offer2就能看到该系列当前连载的所有文章了, 记得关注哦~
class Solution:
def singleNumber(self, nums: List[int]) -> int:
res = 0
for i in range(32):
cnt = 0
for x in nums:
# 统计所有数字在这一位上1的计数
cnt += (x >> i) & 1
if cnt % 3 == 1:
# 说明只出现一次的数字对这一位贡献了1
# 因为其他数字都出现3次, 它们在这一位的计数和对3取模肯定是0
res += 1 << i
if i == 31:
# 第31位是1, 说明是负数, 需要将更高位也转成1, 转成正确的负数表示形式
res = ~(0xFFFFFFFF ^ res)
return res
大家可以在下面这些地方找到我~😊
我的公众号: 算法精选, 欢迎大家关注~😊