力扣 338题 比特位计数

动态规划

1.奇数中1的个数,是它上一个数1个个数+1,如2(10),3(11),4(100),5(101)

2.偶数中1的个数,是它除以2后的那个数的1的个数,如2(10),4(100),8(1000),6(110),12(1100)

3.因此,dp[i]=i&1?dp[i-1]+1:dp[i>>1]

 

class Solution {
public:
    vector<int> countBits(int n) {
        vector<int>dp(n+1,0);
        for(int i=1;i<n+1;++i){
            if(i&1) dp[i] = dp[i-1]+1;
            else dp[i] = dp[i>>1];
        }
        return dp;
    }
};
posted @ 2025-09-24 14:21  往事携冷风  阅读(7)  评论(0)    收藏  举报