比特位计数(二)
上文我们讲了比特位计数的题目描述,本篇文章与大家来聊聊解决方案:
方法一:Pop count
直觉对一个数字解决问题,并应用到全部。
算法
本问题可以看做 力扣 191. 位 1 的个数 的后续。它计数一个无符号整数的位。结果称为 pop count,或 汉明权重。可以参看 力扣 191. 位 1 的个数 的题解以获得更详细介绍。
现在,我们先默认这个概念。假设我们有函数 int popcount(int x) ,可以返回一个给定非负整数的位计数。我们只需要在 [0, num] 范围内循环并将结果存到一个列表中。
Java 实现
public class Solution {public int[] countBits(int num) {int[] ans = new int[num + 1];for (int i = 0; i <= num; ++i)ans[i] = popcount(i);return ans;}private int popcount(int x) {int count;for (count = 0; x != 0; ++count)x &= x - 1; //zeroing out the least significant nonzero bitreturn count;}
}
好了,今天的文章分享和介绍到这里就结束了,希望认真阅读全文的小伙伴,都能有所收获哦!当然了,如果在学习过程中遇到问题,也欢迎一起探讨!