落单的数II(Java)
题目
给出3*n + 1 个的数字,除其中一个数字之外其他每个数字均出现三次,找到这个数字。
输入:
[1,1,2,3,3,3,2,2,4,1]
输出:
4
思路:
按位计算。int型数字占32位,如果这个数字出现3次,则与这个数字对应的每一位上的1也出现三次。使用int型数组记录每一位上1出现的次数,能被3整除则表示出现3次。最后得到的就是要求的数字。
Java代码:
public class Solution {
/**
* @param A : An integer array
* @return : An integer
*/
public int singleNumberII(int[] A) {
// write your code here
if(A == null || A.length == 0)
return 0;
int[] bits = new int[32];
int result = 0;
for(int i = 0; i < 32; i++){
for(int j = 0; j < A.length; j++){
bits[i] += A[j]>>i & 1;
}
bits[i] = bits[i] % 3;
result = result | bits[i] << i;
}
return result;
}
}