蓝桥杯每日一练——比特位计数(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; }};