题目
在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。
思路
- 将所有数字的二进制串相加,出现三次的数字会使得二进制串上1的个数为3的倍数
- 将二进制串的个数模3,当结果不为0时,说明这是出现一次数字的二进制串引起的
代码
class Solution {public int singleNumber(int[] nums) {int[] k = new int[32];for (int num : nums) {for (int i = 0; i < 32; i++) {k[i] += num & 1;num >>= 1;}}int res = 0;for (int i = 0; i < 32; i++) {res |= (k[i] % 3) << i;}return res;}}
