考虑到复杂度只能O(n),每个数分别计算二进制1的个数肯定不行了,然后就想用到前面处理出来的数据,比如知道了1,2的二进制个数,3=2+1就知道3;知道了2和4,6=2+4就知道6。
class Solution {
public:
vector<int> countBits(int num)
{
vector<int> ans;
int now = 1;
ans.push_back(0);
if(num == 0) return ans;
ans.push_back(1);
if(num == 1) return ans;
for (int i = 2; i <= num; i++)
{
if (i == now * 2) now = i;
ans.push_back(1 + ans[i - now]);
}
return ans;
}
};
代码写的比较丑,先将就一下看吧