醜い数33

タイトル説明

これは、2、3及び5は醜い(醜い数)と呼ばれる素因数の数のみを含んでいます。それは7個の素因数が含まれているため、例えば6,8は、14醜いではなく、いくつかあります。伝統的に、我々は最初の醜い数として1を持っています。N醜い多数配列を通して上昇を求めます。

アイデア解析

  • ピュアトラバース整数、タイムアウト。
  • 2,3,5は、後続のすべての醜い番号から得られるよう2,3,5-いくつかの醜い因子のみ、それは数醜い醜い別の数* 2、* 3、* 5は、来なければなりません。我々三醜いの数によって、1から始めて、3つのキューアレイの最終的なリターンを維持し、醜いのN番目の回数になるまで加えたアレイごとに3つのキューの最小値を選択します。最小値が選択された後、3つのキューの先頭の要素とは、同一の最小キュー待ち行列ポインタを++

コードの実装

public int GetUglyNumber_Solution(int N) {
        if (N <= 6) {
            return N;
        }
        int i2 = 0, i3 = 0, i5 = 0;
        int[] dp = new int[N];
        dp[0] = 1;
        for (int i = 1; i < N; i++) {
            int next2 = dp[i2] * 2, next3 = dp[i3] * 3, next5 = dp[i5] * 5;
            dp[i] = Math.min(next2, Math.min(next3, next5));
            if (dp[i] == next2) {
                i2++;
            }
            if (dp[i] == next3) {
                i3++;
            }
            if (dp[i] == next5) {
                i5++;
            }
        }
        return dp[N - 1];
    }
公開された117元の記事 ウォンの賞賛8 ビュー3710

おすすめ

転載: blog.csdn.net/qq_34761012/article/details/104490676