トピック:
これは、2、3及び5は醜い(醜い数)と呼ばれる素因数の数のみを含んでいます。それは7個の素因数が含まれているため、例えば6,8は、14醜いではなく、いくつかあります。伝統的に、我々は最初の醜い数として1を持っています。N醜い多数配列を通して上昇を求めます。
分析:
数にあらゆる数1から始まるから決定することができ、すなわちだけではなく、2、3で割り切れる決定された数をあること、醜いではありません、。もちろん、これはより多くの時間がかかります。
各番号5に醜い醜い低い数2又は3を乗じ又は2,3,5-自体により得られるが、2,3,5-から1が乗算されます。後者によってそれぞれ生成された醜い数は醜い先行2,3,5-が最小数は2によって醜い常に開始してから横断していない、3つのポインタ、ポイントを乗算取ることができるいくつかに由来し得ます、3で、5は醜い、醜い毎回の数を乗算する新しい番号が更新、更新条件には3つのポインタが表示され、2、3を乗じて、醜いの現在の数よりも大きいです。
手順:
C ++
クラス解決{ パブリック: INT GetUglyNumber_Solution(INT インデックス){ 場合(インデックス<= 0 ) 戻り 0 ; もし(インデックス== 1 ) リターン 1 。 ベクター < INT > RES(インデックス0 )。 RES [ 0 ] = 1 ; int型 U2 = 0 ; int型 U3 = 0 ; int型 U5 = 0; 以下のために(INT iが= 1 ; I <指数; ++ I){ RES [I] =最小(MIN(RES [U2] * 2、RES [U3] * 3)、RES [U5] * 5 )。 一方、(RES [U2] * 2 <= RES [i])と U2 ++ 。 一方、(RES [U3] * 3 <= RES [i])と U3 ++ 。 一方、(RES [U5] * 5 <= RES [i])と U5 ++ 。 } リターンRES [index- 1 ]。 } }。
ジャワ
パブリック クラスソリューション{ 公共 のint GetUglyNumber_Solution(int型のインデックス){ 場合(インデックス<= 0 ) を返す 0 。 もし(インデックス== 1 ) リターン 1 。 INT [] RES = 新しい int型[インデックス]。 RES [ 0] = 1 ; int型 U2 = 0 ; int型 U3 = 0 ; int型 U5 = 0 ; 以下のために(int型私は= 1; I <インデックス; ++I){ RES [I] =最小(MIN(RES [U2] * 2、RES [U3] * 3)、RES [U5] * 5 )。 もし(RES [U2] * 2つの== RES [i])と U2 ++ 。 もし(RES [U3] * 3つの== RES [i])と U3 ++ 。 もし(RES [U5] * 5つの== RES [i])と U5 ++ 。 } 戻り RES [インデックス-1 ]。 } プライベート int型分(INT NUM1、INT NUM2){ 戻り NUM1 <NUM2?NUM1:num2の。 } }