leetcode 338 比特位計數
阿新 • • 發佈:2019-02-28
方法 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 比特位計數