> 文档中心 > 蓝桥杯每日一练——比特位计数(Brian Kernighan 算法 )

蓝桥杯每日一练——比特位计数(Brian Kernighan 算法 )


盛年不重来,一日难再晨。及时当勉励,岁月不待人。
                                                                                                ——陶渊明 

https://leetcode-cn.com/problems/counting-bits/https://leetcode-cn.com/problems/counting-bits/

题目描述:

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

示例 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

Brian Kernighan 算法 

class Solution {public:    int countOnes(int x){ int ones=0; while(x>0){     x&=(x-1);     ones++; } return ones;    }    vector countBits(int n) { vector bits(n+1); for(int i=0;i<=n;i++){     bits[i]=countOnes(i); } return bits;    }};