整数中1的数量
通过动态规划的算法确定整数的二进制表示中1的数量
给定正整数n,求出i(0<=i<=n)的二进制表示中1的数量。
事实上,有如下的关系存在: \(f(n) = f(n/2)+n\%2\)
因为n/2=n»1(整数除法)
当n为偶数时,n的最后一位为0,因此n与n/2的二进制中1数量相同;
当n为奇数时,n的最后一位为1,因此n的二进制中1数量比n/2多1。
根据上述关系,可以使用动态规划的算法,得到整数二进制表示中1的数量,代码如下:
1
2
3
4
5
6
7
8
9
// LeetCode 338. Counting Bits
vector<int> countBits(int num) {
assert(num >= 0);
vector<int> count(num+1, 0);
for (int i = 1; i <= num; i++) {
count[i] = count[i >> 1] + (i % 2);
}
return count;
}
本文由作者按照 CC BY 4.0 进行授权