1. 程式人生 > >【一次過】Lintcode 664. 數 1

【一次過】Lintcode 664. 數 1

給以 非負 整數 num. 對所有滿足 0 ≤ i ≤ num 條件的數字 i 均需要計算其二進位制表示 1 的個數並以陣列的形式返回

樣例

給出 num = 5 你需要返回 [0,1,1,2,1,2].

挑戰

時間複雜度為 O(n * sizeof(integer))的解法很容易想到, 但是你是否可以用線性的時間複雜度 O(n)/可能只遍歷一遍嗎, 空間複雜度應為 O(n).
你能霸氣的完成這項挑戰嗎? 不借助任何內嵌的函式, 比如C++ 中的__builtin_popcount 亦或是任何其他語言中的方法


解題思路:

非常簡單。

public class Solution {
    /**
     * @param num: a non negative integer number
     * @return: an array represent the number of 1's in their binary
     */
    public int[] countBits(int num) {
        // write your code here
        int[] res = new int[num+1];
        
        for(int i=0; i<=num; i++)
            res[i] = Integer.bitCount(i);
        
        return res;
    }
}