天天看點

LeetCode_338. 比特位計數

題目描述:

給定一個非負整數 num。對于 0 ≤ i ≤ num 範圍中的每個數字 i ,計算其二進制數中的 1 的數目并将它們作為數組傳回。

示例 1:

輸入: 2

輸出: [0,1,1]

示例 2:

輸入: 5

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

class Solution {
public:
    vector<int> countBits(int num) {
        //分奇偶
        //奇數一定比前一個偶數多1個1
        //偶數等于右移一位後的偶數,即除以2以後的偶數
        vector<int> dp(num+1,0);
        for(int i=1;i<=num;i++){
            if(i%2!=0){//奇數
                dp[i]=dp[i-1]+1;
            }else{
                dp[i]=dp[i/2];
            }
        }
        return dp;
    }
};