137. 只出现一次的数字 II (中等。位运算)

在这里插入图片描述
不会做,思路来自官解
对于每一位来说,每个数字只能是 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

你可能感兴趣的:(用Python刷力扣,python,leetcode,算法)