1. 程式人生 > >leetcode 338 比特位計數

leetcode 338 比特位計數

方法 class bits pre 就是 比特 ntb count 循環

如果一個數i%2=1,即為奇數,即二進制中的最低位為1。我們將這個過程循環直至i為0,每一次i%2=1我們將該數的‘1’數加一。

上面的方法不能做到復雜度O(n)完成所有數的的遍歷。我們換成動態規劃。i%2=1,則有 dp[i]=dp[i/2]+1;每次將一個數向右移一位,看被移動的數的一的數目再加上當前一個1。如果i%2!=1則說明該數最後一位不為1,所以我們將該數直接移位 即 dp[i]=dp[i/2];

以上就是遞推思路,開始著手代碼

class Solution {
public:
    vector<int> countBits(int num) {
        vector
<int> res(num+1,0); for(int i=1;i<=num;i++) { if(i%2==1) { res[i]=res[i/2]+1; } else res[i]=res[i/2]; } return res; } };

還是菜啊,水貨一只。

leetcode 338 比特位計數