题意:给出一个数组,除了一个数只出现了1次,其他的都出现了3次,求这个数。
题解:不管是其他数字出现了几次,我们都可以用这个方法,就是按位来求,把所有数的某一位全加起来,然后%出现的次数,如果是1,那么就说明那个要求的数这位是1,如果是0,那么就说明要求的那个数这位为0.求完32位就是答案。
class Solution {
public:
int singleNumber(vector<int>& nums) {
int n = nums.size();
int ans = 0;
for(int i = 0; i < 32; i++)
{
int bit = 0;
for(int j = 0; j < n; j++)
{
bit += (nums[j] >> i) & 1;
}
ans |= ((bit%3)<<i);
}
return ans;
}
};