1. 程式人生 > >Lintcode—落單的數II

Lintcode—落單的數II

落單的數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; } }