建立长度为32的数组bit,bit[i]表示nums中有多少个元素32位二进制表示中第i个bit为1,遍历一遍nums,将每个num中二进制表示出现1的位加入bit数组,最后检查bit数组,找出不为3的倍数的位,将其还原成只出现1次的数字。
class Solution(object):
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
minus = 0
bit = [0] * 32
for num in nums:
if num < 0:
num *= -1
minus += 1
bit_num = bin(num)[2:][::-1]
for i in range(len(bit_num)):
if bit_num[i] == '1':
bit[i] += 1
for i in range(len(bit)):
bit[i] %= 3
result = 0
for i in range(len(bit)):
if bit[i] == 1:
result += 1 << i
return result if minus % 3 == 0 else -result