题意:
给一个整数数组,所有数字都出现过三次,只有一个数字只出现过一次,找出这个数字。
分析:
因为是三次,没有办法通过异或等手段来做。只好统计每一个二进制位,所有的1的个数是不是三的倍数。如果是,说明单独的那个数这一位为0,否则为1.
0000 0000 0000 0000 0000 0000 0000 0001
public class Solution {
public int singleNumber(int[] nums) {
int res = 0;
for(int i=0; i<32; i++){
int count = 0;
int bit = 1 << i;
for(int j=0; j<nums.length; j++){
if((nums[j] & bit) !=0) //数的那一位为1
count++;
}
if(count % 3 == 1) //那一位1的个数不是三的倍数,说明目标数那一位为1
res = res | bit; //将那一位设置为1
}
return res;
}
}