写点什么

【LeetCode】比特位计数 Java 题解

用户头像
HQ数字卡
关注
发布于: 2021 年 03 月 03 日

题目

给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。


代码

public class DayCode {    public static void main(String[] args) {        int num = 10;        int[] ans = new DayCode().countBits(num);        System.out.println("ans is " + Arrays.toString(ans));    }        /**     * https://leetcode-cn.com/problems/counting-bits/     * @param num     * @return     */    public int[] countBits(int num) {        int[] bits = new int[num + 1];        for (int i = 0; i <= num; i++) {            bits[i] = countOne(i);        }        return bits;    }
public int countOne(int i) { int cnt = 0; while (i > 0) { i &= (i - 1); cnt++; } return cnt; }}
复制代码


/** Returns the number of one-bits in the two's complement binary representation of the specified {@code int} value.  This function is sometimes referred to as the <i>population count</i>.  @param i the value whose bits are to be counted @return the number of one-bits in the two's complement binary representation of the specified {@code int} value. @since 1.5*/public static int bitCount(int i) {    // HD, Figure 5-2    i = i - ((i >>> 1) & 0x55555555);    i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);    i = (i + (i >>> 4)) & 0x0f0f0f0f;    i = i + (i >>> 8);    i = i + (i >>> 16);    return i & 0x3f;}
复制代码


总结

  • 计算比特位为 1 的个数,可以直接调用 Integer.bitCount() 方法执行,附上了 Java 代码的实现,也是利用位运算进行高效的计算。

  • 位运算是基于整数的二进制表示进行的运算,计算效率高!

  • 坚持每日一题,加油!


发布于: 2021 年 03 月 03 日阅读数: 14
用户头像

HQ数字卡

关注

还未添加个人签名 2019.09.29 加入

LeetCode,略懂后端的RD

评论

发布
暂无评论
【LeetCode】比特位计数Java题解