给出3*n + 1 个的数字,除其中一个数字之外其他每个数字均出现三次,找到这个数字。
样例
给出 [1,1,2,3,3,3,2,2,4,1] ,返回 4
public class Solution {
/**
* @param A : An integer array
* @return : An integer
*/
public int singleNumberII(int[] A) {
//int 为 32 位
//相同数的每个数位一致
//如果数位的1个数为3的倍数,则为出现3次的数,反之为需要找的那个数
int[] bits = new int[32];
int res=0;
for(int i=0; i<32; i++){//求每个数位的个数,余数为要找的数的数位上的值
for(int j=0; j<A.length; j++){
bits[i]+=A[j]>>i & 1;//第i位为1的个数
}
bits[i] = bits[i]%3;
res = res | bits[i]<<i; //把bits[i]移位会应该在的数位
}
return res;
}
}