338. 比特位计数

package leetcode;

public class demo_338 {
    public int[] countBits(int n) {
        int[] res=new int[n+1];
        for(int i=0;i<=n;i++) {
            if(i==0) {res[i]=0;continue;}
            if(i==1) {res[i]=1;continue;}
            if(i==2) {res[i]=1;continue;}
            //偶数相当于自己一半的数左移一位,于是1的个数不变
            if(i%2==0) {
                res[i]=res[i/2];
            //奇数为偶数加1,因为偶数左移一位会多一个0,此时0变成1,则1的个数加一
            }else {
                res[i]=res[i-1]+1;
            }
        }
        for (int i : res) {
            System.out.println(i);
        }
        return res;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        demo_338 demo=new demo_338();
        demo.countBits(16);
    }

}

 

posted on 2022-04-27 16:58  一仟零一夜丶  阅读(38)  评论(0)    收藏  举报