トピック:
非負整数NUMを考えます。0≤I≤I、二進数字1と配列として返すそれらの数を算出し、各デジタルNUM範囲のため。
例1:
入力:2
出力:[0,1,1]
例2:
入力:5
出力:[0,1,1,2,1,2]
アドバンス:
時間の複雑さを考えるとO(N *はsizeof(整数)がされて ) 非常に簡単に答えます。しかし、あなたは1が通過して線形時間O(n)の中でそれを行うことができますか?
アルゴリズムの複雑さの空間要件はO(N)です。
あなたは、さらにソリューション、それを改善することができますか?要求は、これを実行するために、任意の組み込み関数(例えば、中__builtin_popcount C ++)でのC ++や他の言語を使用していません。
コード:
class Solution {
public:
vector<int> countBits(int num) {
vector<int>ans;
ans.insert(ans.end(), 0);
for (int i = 1; i <= num; i++)
{
ans.insert(ans.end(), i % 2 + ans[i / 2]);
}
return ans;
}
};