您的位置:首页 > 其它

leetcode338——Counting Bits

2018-03-27 15:44 281 查看
题目大意:给出一个十进制数字n,求出所有小于等于它的自然数对应的二进制中有几个1,将答案存入数组中返回
分析:dp。
          状态:dp[i]——i的二进制中1的个数
          初始化:dp[0]=0
          状态转移方程:dp[i]=dp[i>>1]+i&1;
          i对应的二进制中1的个数等于i右移一位后1的个数加上i的二进制最低位数字,由于每个数的二进制右移后得到的二进制数含有的1的个数在之前都进行过求解,所以将问题转化为子问题的求解,原问题答案也就是子问题答案+新加入的一位中1的个数
代码:
class Solution {
public:
vector<int> countBits(int num) {
vector<int> dp(num + 1, 0);
for (int i = 1;i <= num;i++) {
dp[i] = dp[i >> 1] + (i & 1);
}
return dp;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: