原题链接
解题思路
第一次提交的代码效率很差,排名很靠后。
后面重新去思考了一下题目,将一部分数字展开二进制,发现有如下规律ans[i] = ans[i>>1] + (i&1); 还是解释一下,将num右移一位(此数前面已经保存),然后判断num最后一位是不是1,然后加上最后一位。
解题代码
public class Solution {
public int[] countBits(int num) {
int[] ans = new int[num+1];
ans[0] = 0;
for(int i = 1;i < num+1;i++){
ans[i] = ans[i>>1] + (i&1);
}
return ans;
}
}