タイトル説明
これは、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];
}