题目

在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。

思路

  • 将所有数字的二进制串相加,出现三次的数字会使得二进制串上1的个数为3的倍数
  • 将二进制串的个数模3,当结果不为0时,说明这是出现一次数字的二进制串引起的

    代码

    1. class Solution {
    2. public int singleNumber(int[] nums) {
    3. int[] k = new int[32];
    4. for (int num : nums) {
    5. for (int i = 0; i < 32; i++) {
    6. k[i] += num & 1;
    7. num >>= 1;
    8. }
    9. }
    10. int res = 0;
    11. for (int i = 0; i < 32; i++) {
    12. res |= (k[i] % 3) << i;
    13. }
    14. return res;
    15. }
    16. }