分析:这题的意思就是比如给你 100 这个数,然后让你看 1,2,3,...,100 这100个数字分别转化为二进制以后 相应的二进制数都有多少个1
考虑到每一个数字都得转化为二进制求有多少个1,所以使用动态规划
思路
对于所有的数字,只有两类:
奇数:二进制表示中,奇数一定比前面那个偶数多一个 1,因为多的就是最低位的 1。
举例:
0 = 0 1 = 1
2 = 10 3 = 11
偶数:二进制表示中,偶数中 1 的个数一定和除以 2 之后的那个数一样多。因为最低位是 0,除以 2 就是右移一位,也就是把那个 0 抹掉而已,所以 1 的个数是不变的。
举例:
2 = 10 4 = 100 8 = 1000 都是1个1
3 = 11 6 = 110 12 = 1100 都是2个1
作者:duadua
链接:https://leetcode-cn.com/problems/counting-bits/solution/hen-qing-xi-de-si-lu-by-duadua/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
public int[] countBits(int n) {
int [] result = new int[n+1];
result[0] = 0;
for(int i = 1; i <= n ;i++){
if(i % 2 == 1){//如果是奇数
//奇数一定比前面的偶数多一个1
//2:10 3:11 4:100 5:101
result[i] = result[i - 1] + 1;
}else{
//偶数中 1 的个数一定和除以 2 之后的那个数一样多
//3:11 6:110 12:1100
result[i] = result[i / 2];
}
}
return result;
}