思路1:
1.通过移位判断每个位是否是1
2.遍历所有的数字
class Solution { public int[] countBits(int num) { int[] res=new int[num+1]; for(int i=0;i<=num;i++){ res[i]=binaryToDecimal(i); } return res; } public int binaryToDecimal(int n){ int res=0; for(int i = 31;i >= 0; i--){ if((n>>>i & 1)==1){ res++; } } return res; } }
思路2:
暂时还没搞懂,但是空间复杂度要比上面一个低
public int[] countBits(int num) { int[] f = new int[num + 1]; for (int i=1; i<=num; i++) f[i] = f[i >> 1] + (i & 1); return f; }