leetcode 264醜い数2

プレミアム醜い数!最後に、それはいくつかの醜いの最初のでしょうか?

この質問は醜いの元の数に基づいています
探して最初の数醜い数

失敗した試み

テーブルを直接ヒット分析
醜い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;
    }
};
公開された34元の記事 ウォンの賞賛0 ビュー592

おすすめ

転載: blog.csdn.net/Luyoom/article/details/103590035