比特位计数

题目链接

比特位计数

题目描述

比特位计数_第1张图片

注意点

  • 对于 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;
    }
}

关键点

  • 动态规划的思想

你可能感兴趣的:(算法TOP100,leetcode,java,算法,数据结构,动态规划)