leetcode 338. 比特位计数

时间秒杀一切 提交于 2020-02-02 20:38:17

比特位技术的解题思路:

方法一: 动态规划

1.arr[i]=arr[i&(i-1)]+1

方法二: 遍历每一个数字,获得每个数字的1的个数

代码

public static int[] countBits(int num) {
        int[] arr=new int[num+1];
        for(int i=0;i<=num;i++){
            int oneNum = getOneNum(i);
            arr[i]=oneNum;
        }

        return arr;
    }

    public static int[] countBits2(int num) {
        int[] arr=new int[num+1];
        for(int i=1;i<=num;i++){
            arr[i]=arr[i&(i-1)]+1;
        }
        return arr;
    }

    public static int getOneNum(int num){
        int count=0;
        while(num>0){
            count++;
            num=num&(num-1);
        }
        return count;
    }

    public static void main(String[] args) {
        int oneNum = getOneNum(10);
        System.out.println(oneNum);


        int[] nums = countBits(5);
        System.out.println(Arrays.toString(nums));

        int[] nums2 = countBits2(5);
        System.out.println(Arrays.toString(nums2));

    }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!