Leetcode闲逛随笔

今天经同学介绍一个国外的面试刷题网站,类似于国内的九度,叫Leetcode(找工作的童鞋可以逛一逛),本人闲逛了一下做了一道题,题目如下:
Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1’s in their binary representation and return them as an array.
大意就是求得0到n的二进制数中1的个数。解题的大体思路是对所求数组进行分组,将转换后的二进制数位数相同的分为一组,如2、3一组,4、5、6、7一组等,主要是获取分组的组头元素的编号,如2,、4、8等。然后就可以通过之前分组的二进制数中1的个数来获取当前分组的二进制数中1的个数,如2、4、8。。。转换的二进制中1的个数为0转换的二进制中1的个数加,1,3、5、9。。。转换的二进制中1的个数为1转换的二进制中1的个数加1,,依次类推,当前所求数转换的二进制中1的个数都可以通过之前求得的个数加1获得。贴出代码如下:

public class Solution {
    public int[] countBits(int num) {
        int st1=2;
        int st2=2;
        int[] ret=new int[num+1];
        ret[0]=0;
        if(num>0) ret[1]=1;
        for(int i=2;i<=num;i++){
            if(i/st1==1){
                st2=st1;
                st1=st1*2;
            }
             if(i<st1) ret[i]=ret[i-st2]+1;

        }
        return ret;
    }
}

图片为提交后的结果显示
结果显示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值