原题链接:Leecode 338. 比特位计数
位运算:
class Solution {
public:
vector<int> countBits(int n) {
vector<int> res;
for(int i=0;i<=n;i++)
{
int cnt=0,x=i;
while(x)
{
x=x&(x-1);
cnt++;
}
res.push_back(cnt);
}
return res;
}
};
DP+位运算:
class Solution {
public:
vector<int> countBits(int n) {
vector<int> dp(n+1);
for(int i=1;i<=n;i++)
{
dp[i]=dp[i&(i-1)]+1;
}
return dp;
}
};