问题描述(原题链接)
给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans 作为答案。
代码:
常规做法
class Solution {
public int[] countBits(int n) {
//常规算法
int[] res = new int[n+1];
res[0]=0;
for(int i=1;i<=n;i++){
int num = count(i);
res[i]=num;
}
return res;
}
private int count(int n){
if(n==0)
return 0;
int count=0;
while(n>0){
count++;
n=n&(n-1);
}
return count;
}
}
动态规划
class Solution {
public int[] countBits(int n) {
//常规算法
int[] res = new int[n+1];
res[0]=0;
for(int i=1;i<=n;i++){
res[i]=res[i&(i-1)]+1;
}
return res;
}
}