[路飞]_leetcode_剑指 Offer II 003. 前 n 个数字二进制中 1 的个数

120 阅读1分钟

给定一个非负整数 n ,请计算 0 到 n 之间的每个数字的二进制表示中 1 的个数,并输出一个数组。

示例 1:

输入: n = 2
输出: [0,1,1]
解释: 
0 --> 0
1 --> 1
2 --> 10

示例 2:

输入: n = 5
输出: [0,1,1,2,1,2]
解释:
0 --> 0
1 --> 1
2 --> 10
3 --> 11
4 --> 100
5 --> 101

解题思路

这一题求的是数的二进制表示为1的个数,那么我们遍历每个数,让每个数做位运算直到数为0,然后判断位运算最后一位是否为1,如果为1则出现次数加1次,否则跳过。

代码

var countBits = function(n) {
    let bit2 = new Array(n + 1).fill(0)
    for (let i = 1; i <= n; i++) {
        let x = i;
        do {
            if (x & 1) {
                bit2[i]++
            }
            x = x >> 1;
        } while (x)
    }
    return bit2
};