注意边界及特殊情况
problem link:https://leetcode.com/problems/counting-bits/
code1(java 3ms):
public class Solution {
public int[] countBits(int num) {
if(num==0){
return new int[1];
}
int[] res = new int[num + 1];
res[1] = 1;
int pow = 2;
for (int i = 2; i <= num;) {
for (int j = 0; j < pow && i <= num; j++) {
res[i] = 1 + res[i - pow];
i++;
}
pow*=2;
}
return res;
}
}
discuss solution(java 2ms):
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;
}