给出3*n + 1 个的数字,除其中一个数字之外其他每个数字均出现三次,找到这个数字。
一刷没ac
解题思路:将每个数字转成bit,每个数字出现n次的话,对应每一位的和模n一定会有一个余数,这个余数就是由出现一次的数字造成的,因此可以求解。
public class Solution {
/**
* @param A : An integer array
* @return : An integer
*/
public int singleNumberII(int[] A) {
if(A == null || A.length == 0) return 0;
int res = 0;
for(int i = 0; i < 32; i++){
int sum = 0;
for(int j = 0; j < A.length; j++){
sum += (A[j] >> i) & 1;
sum %= 3;
}
if(sum != 0) res |= (sum<<i);
}
return res;
}
}