プレミアム醜い数!最後に、それはいくつかの醜いの最初のでしょうか?
この質問は醜いの元の数に基づいています
探して最初の数醜い数
失敗した試み
テーブルを直接ヒット分析
醜い1690内のすべての数値
確かにタイムアウトメリットが提供
誰裁判官が
見つける必要があるだろうデータがルール
観察利用できる
醜い優れた塩基番号2、3、5、まだ醜いの数である-簡素化解析
醜い数は、以下のリストから構成することができるので、
2 | 1 * 2 2 * 2 * 2 * 2 4 |
---|---|
3 | 1 * 3 * 2 3 3 * 3 4 * 3 |
5 | 1 * 2 2 * 2 * 2 * 2 4 |
実践:
- メンテナンス3本のリスト- ugly2、ugly3、ugly5
それぞれ今**保存* 2、今* 3今、* 5 ** - リストの先頭に3を取ります 最小- (等価対数醜い醜いの数CNT番号ソート処理)
- n番目の醜いの数を取ることである - CNTに達するNまで
コードは以下の通りであります:
class Solution {
public:
int nthUglyNumber(int n) {
list<long long> ugly2;
list<long long> ugly3;
list<long long> ugly5;
long long now = 1;
int cnt = 1;
while (cnt != n) {
ugly2.push_back(now * 2);
ugly3.push_back(now * 3);
ugly5.push_back(now * 5);
long long min2 = ugly2.front();
long long min3 = ugly3.front();
long long min5 = ugly5.front();
long long MIN = min(min2, min(min3, min5));
if (min2 == MIN) ugly2.pop_front();
if (min3 == MIN) ugly3.pop_front();
if (min5 == MIN) ugly5.pop_front();
now = MIN;
cnt++;
}
return now;
}
};