Lintcode—落單的數II
阿新 • • 發佈:2019-02-17
落單的數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;
}
}