今天经同学介绍一个国外的面试刷题网站,类似于国内的九度,叫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;
}
}
图片为提交后的结果显示