[编程题] lk [338. 比特位计数-位运算]

[编程题] lk 338. 比特位计数-位运算

题目

image-20200730204818150

输入输出

image-20200730204831628

思想:

​ 题意是给5,那么就分别算0,1,2,3,4,5这些数字化为二进制的时候其中的1的个数,我们对每个数计算二进制个数的话都用一次位运算计数处理

方法1:位运算

class Solution {
    //方法1:借助位运算
    /*题目思想:题意是给5,那么就分别算0,1,2,3,4,5这些数字化为二进制的时候其中的1的个数
        我们对每个数计算二进制个数的话都用一次位运算计数处理*/
    public int[] countBits(int num) {
        int[] res = new int[num+1];
        res[0] = 0;
        for(int i=1;i<=num;i++){
            int count=0;
            int j=i;  //先拿到本次要处理的值保存给变量j,因为变量i在数组索引还要用
            while(j!=0){
                j = j & (j-1);
                count++;
            }
            res[i] = count;
        }
        return res;
    }   
}

输出:

输入5:输出如下:

image-20200730204932186

posted @ 2020-07-30 20:51  北鼻coder  阅读(164)  评论(0编辑  收藏  举报