其他分享
首页 > 其他分享> > 比特位计数

比特位计数

作者:互联网

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

/**

/**
 * 奇偶数计算二进制中1的个数:
 * 1.偶数在二进制中最低位为0,所以偶数二进制中1的个数应该与该数/2后1的个数相当
 * 2.奇数比前一个相邻的偶数多了1,即二进制最低位为1,1的个数比前一个相邻偶数多1
 */
class Solution {
    public int[] countBits(int n) {
        int[] num = new int[n+1];
        //num[0]==0
        int i = 1;
        while(i <= n){
            if ((i & 1) ==1)//i为奇数时
                num[i] = num[i-1] + 1;
            else
                num[i] = num[i>>1];//即偶数/2向右移动一位
            i++;//写while时先写出,需修改时修改,以防忘记

            //看到有大佬写的更简便,如下
            //num[i] = num[i>>1] + (i & 1);
            //i++;
        }
        return num;
    }
}

标签:比特,二进制,个数,偶数,计数,int,num,位为
来源: https://blog.csdn.net/m0_53022735/article/details/122752883