题目链接:https://leetcode-cn.com/problems/single-number-ii/
难度:中等

描述:
给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。

题解

把数组中每个元素的每个位都加起来,再对每个位取mod 3得到的结果就是答案

  1. class Solution:
  2. def singleNumber(self, nums: List[int]) -> int:
  3. arr = [0] * 32
  4. ret = 0
  5. for num in nums:
  6. for i in range(32):
  7. arr[i] += num & 1
  8. num >>= 1
  9. for i in range(32):
  10. ret <<= 1
  11. ret |= arr[31-i] % 3
  12. # 在python里,防止ret是负数
  13. return ret if arr[31] % 3 == 0 else ~(ret ^ 0xffffffff)