假设要求的数为x
枚举32位串的整数中每位1的个数和0的个数,由于除了一个数每个数都出现了3次,假设剔除x
那么所有位上1的个数模3都得0, 0的个数模3也得0.因此原数组中所有位模的0或1的个数要么是0要么是1
如果是1说明x的该位上是1,如果是0说明x的该位是0.因此只需统计1的个数
class Solution {
public:
int findNumberAppearingOnce(vector<int>& nums) {
int res = 0;
for(int i = 0;i < 32; i++) { //枚举32位整数中每位1的个数
int k = 0;
for(int j = 0; j < nums.size();j++){
if(nums[j] >> i & 1) k ++;
}
if(k % 3) res += 1 << i; // 1 << i 表示2^i
}
return res;
}
};