位操作型動態規劃 位元位計數

2021-10-18 23:00:36 字數 1000 閱讀 3550

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

示例 1:

輸入: 2

輸出: [0,1,1]

從題目中的二進位制數能夠比較明顯的看出該題目屬於位操作型動態規劃,同時屬於計數型的動態規劃

這個的最後一步應該很好理解,就是它的最後一位二進位制位,舉個例子:

170=10101010,它的最後一位是0,去掉它的最後一位則剩下的數就是85=1010101。

因此我們如果要求170的二進位制有多個1,只需要求出去掉它的最後一位之後的85的二進位制有多少個1,然後加上剛剛去掉的那位。如果去掉的那位是1的話則,170的1的個數就等於85的乙個的個數+1;如果是0,則170的1的個數就等於85 的個數。然而要知道最後一位是1還是0 ,只需要該數除以2即可判斷

假設f[i]表示i的二進位制中有多少個1

初始條件:f[0]=0

同樣是從小到大計算,因為計算f[i]的1的個數,需要知道f[i/2]的1的個數

class

solution

:def

countbits

(self, num:

int)

-> list[

int]

: dp =[0

for i in

range

(num+1)

]for i in

range(1

,num+1)

:if i%2==

1:dp[i]

=dp[i//2]

+1else

: dp[i]

=dp[i//2]

return dp

位元位計數 動態規劃

給定乙個非負整數num。對於0 i num範圍中的每個數字i,計算其二進位制數中的1的數目並將它們作為陣列返回。示例 1 輸入 2 輸出 0,1,1 示例 2 輸入 5 輸出 0,1,1,2,1,2 public int countbits int num private int popcount ...

位元位計數

一 題目描述 二 題目分析 題解參考 自己分析沒分析出來,看完題解,忍不住妙出了聲。對於數字有兩類,偶數與奇數,從二進位制的角度看,奇數的二進位制標示肯定比前面乙個偶數多1,因為偶數的最低為0,而因為最低為為0,則讓乙個偶數的二進位制1的個數一定和自身除以2後的二進位制1的個數相等。通過上面這兩個特...

位元位計數

位元位計數 給定乙個非負整數 num。對於 0 i num 範圍中的每個數字 i 計算其二進位制數中的 1 的數目並將它們作為陣列返回。題解 這種題如果不加限制的話可以選擇移位 1的方式計算1的個數 但是要求是在o n 的時間複雜度下完成就需要腦筋急轉彎啦 0000 0 0001 1 0000 00...