不会做,思路来自官解
对于每一位来说,每个数字只能是 0 或 1,如果所有数字的第 i 位和能被3整除,那么表示只出现一次的这个元素在这一位上为0,反之就是1
class Solution:
def singleNumber(self, nums: List[int]) -> int:
ans = 0
for i in range(32):
total = sum((num >> i) & 1 for num in nums)
if total % 3:
# Python 这里对于最高位需要特殊判断
if i == 31:
ans -= (1 << i)
else:
ans |= (1 << i)
return ans
更快的解,但是需要空间
class Solution:
def singleNumber(self, nums: List[int]) -> int:
return (sum(set(nums)) * 3 - sum(nums)) // 2