比特位计数

leetCode–338(比特位计数)

给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans 作为答案。

示例 1:

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

示例 2:

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

解法一:Brian Kernighan 算法

Brian Kernighan 算法: 当进行x&(x-1)时,时删除x二进制位中最右侧的 1 。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public int[] countBits(int n) {
int res[] = new int[n+1];
for (int i = 1;i<=n;i++){
res[i] = sal(i);
}
return res;
}
public int sal(int a){
int count = 0;
while (a>0){
a = a&(a-1);
count++;
}
return count;
}
}

解法二:


比特位计数
http://example.com/2022/06/09/比特位计数/
作者
zlw
发布于
2022年6月9日
许可协议