OJ 338力バックルビット数

トピック:

非負整数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;
	}
};

 

リリース1235元の記事 ウォンの賞賛682 ビュー172万+

おすすめ

転載: blog.csdn.net/nameofcsdn/article/details/104220855