题目链接
比特位计数
题目描述
注意点
- 对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数
解答思路
- 采用动态规划的思想,任意一个数字的1的个数可以由前面数字1的个数推出(除2的n次方的数字外),所以任意一个数字有两种情况:如果其为2的n次方则只有1个1,其他情况则是由当前数字减去2的(n - 1)次方后的数字的1的个数再加1
代码
class Solution {
public int[] countBits(int n) {
int[] res = new int[n + 1];
int nextSq = 1;
for (int i = 1; i <= n; i++) {
if (i == nextSq) {
res[i] = 1;
nextSq = nextSq * 2;
} else {
res[i] = res[i - nextSq / 2] + 1;
}
}
return res;
}
}
关键点