【一次過】Lintcode 664. 數 1
阿新 • • 發佈:2018-11-07
給以 非負 整數 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; } }