Counting Bits 题解
题目描述:
Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1's in their binary representation and return them as an array.
链接:点击打开链接
题解:
这道题的核心是需要计算一个数二进制下的 “1” 的个数,通过观察“1,10,11,100,101,110,111·····”,我们可以发现第 i 位就是第 i/2 位加上 i%2 的值
ans[i]=ans[i/2]+(i%2);
这行代码实现了这一过程,算法中采用迭代,时间复杂度为O(n)。
代码:
class Solution {
public:
vector<int> countBits(int num) {
vector<int> ans(num+1);
ans[0]=0;
for(int i=1; i<=num; i++){
ans[i]=ans[i/2]+(i%2);
}
return ans;
}
};