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;
}
};
分析: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;
}
};
相关文章推荐
- LeetCode 第 338 题 (Counting Bits)
- leetcode——338——Counting Bits
- leetcode-338-Counting Bits
- [leetcode-338]Counting Bits(java)
- leetcode(338). Counting Bits
- 位操作-leetcode 338 Counting Bits
- leetcode 338 Counting Bits【leetcode新题】 数11,C++
- Leetcode #338 - Counting bits - Medium
- leetcode:338. Counting Bits
- LeetCode 338 Counting Bits (递推)
- LeetCode 338 -Counting Bits ( JAVA )
- LeetCode 338 Counting Bits
- [LeetCode 338] Counting Bits
- Leetcode 338 Counting Bits
- LeetCode 338 Counting Bits
- 【LeetCode-338】Counting Bits(C++)
- Leetcode 338 Counting Bits
- LeetCode之338—-Counting Bits
- leetcode 338:Counting Bits 数1,C++
- Leetcode 338 Counting Bits