边工作边刷题:70天一遍leetcode: day 58-2
Single Number III
要点:这题和I一脉相承,从1个不同变成2个不同,其他数是配对。而II是三个重复
逻辑:因为全部数的xor值在其他两两相同值消掉之后,剩下2个异类的xor相当于二者的不同的位。这样可以根据最低不同位把2个不同数选出来:把其他数分成两组再按I的方法选。
class Solution(object):
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
xor = 0
for n in nums:
xor^=n
bit = xor & ~(xor-1)
xor1,xor2 = 0,0
for n in nums:
if n & bit:
xor1^=n
else:
xor2^=n
return [xor1, xor2]