循环中每次直接计算两个数即可,边界需要另外处理
public static int[] countBits(int num) {
int[] result = new int[num + 1];
if (num == 0) {
return result;
}
result[1] = 1;
for (int i = 2; i + 1 <= num; i += 2) {
result[i] = result[i / 2];
result[i + 1] = result[i] + 1;
}
if ((num & 1) == 0) {
result[num] = result[num / 2];
}
return result;
}
该代码实现了一个动态规划解决方案,用于计算给定整数范围内所有数的二进制1的个数。利用位操作优化了循环,特别处理了边界情况,提高了效率。
575

被折叠的 条评论
为什么被折叠?



