オファー-32に勝つ。醜い数(C ++ / Java)の

トピック:

これは、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の。
    }
}

 

おすすめ

転載: www.cnblogs.com/silentteller/p/11974044.html