338 位元位計數

2021-10-08 05:11:24 字數 1035 閱讀 5568

題目描述:

給定乙個非負整數 num。對於 0 ≤ i ≤ num 範圍中的每個數字 i ,計算其二進位制數中的 1 的數目並將它們作為陣列返回。

示例 1:

輸入: 2

輸出: [0,1,1]

示例 2:

輸入: 5

輸出: [0,1,1,2,1,2]

高階:方法1:直接對每乙個數字進行判斷

主要思路:

(1)對每乙個數字單獨判斷其二進位制中 1 所佔的位數;

class

solution

return count;

//返回結果

} vector<

int>

countbits

(int num)

return res;}}

;

方法2:動態規劃

主要思路:

(1)考慮二進位制的數字的分布形式,對於每個2的整次冪 i 開始的數字,到下乙個2的整次冪 i+1 之間的數字的二進位制表示中的1的個數,是整次冪 i 之前的所有的數字,加上當前的1 的重複,這樣就可以使用之前的已知的的 數字 中1的個數,來獲得當前的數字中1的個數;

class

solution

//定義動態陣列

vector<

int>

res(num+1,

0);//基礎的兩種情形,既只有一位時的兩種情形,既0,和1的表示

res[1]

=1;//begin是每次開始整次冪

int begin=2;

//終止條件

while

(begin<=num)

begin<<=1;

//獲得新的整數冪起始值

}return res;}}

;

338 位元位計數

給定乙個非負整數num。對於0 i num範圍中的每個數字i,計算其二進位制數中的 1 的數目並將它們作為陣列返回。示例 1 輸入 2輸出 0,1,1 示例 2 輸入 5輸出 0,1,1,2,1,2 高階 要求演算法的空間複雜度為o n 你能進一步完善解法嗎?要求在c 或任何其他語言中不使用任何內建...

338 位元位計數

給定乙個非負整數num。對於0 i num範圍中的每個數字i,計算其二進位制數中的 1 的數目並將它們作為陣列返回。示例 1 輸入 2 輸出 0,1,1 示例 2 輸入 5輸出 0,1,1,2,1,2 高階 要求演算法的空間複雜度為o n 你能進一步完善解法嗎?要求在c 或任何其他語言中不使用任何內...

338 位元位計數

給定乙個非負整數 num。對於 0 i num 範圍中的每個數字 i 計算其二進位制數中的 1 的數目並將它們作為陣列返回。示例 1 輸入 2 輸出 0,1,1 示例 2 輸入 5 輸出 0,1,1,2,1,2 高階 要求演算法的空間複雜度為o n 你能進一步完善解法嗎?要求在c 或任何其他語言中不...