求從0-num的所有整數在二進制表示中的1的數目。
這個顯然用動態規劃來解。每一個整數,假設是32位的,其二進制1的數目,等于其左邊31位中的1的數目,加上最后1位中1的數目。我們從小到大來計算,任何一個整數,其左邊31位所代表的整數,一定在之前的運算中計算過了,因此查表即可。
空間復雜度:O(n)
時間復雜度:O(n)
class Solution {
public:
vector<int> countBits(int num) {
vector<int> results;
results.push_back(0);
for (int i = 1; i <= num; i++)
{
int a = i >> 1;
int b = i & 1;
results.push_back(results[a] + b);
}
return results;
}
};