ソードフィンガーオファー—49。醜い数字—分析とコード(Java)

1.タイトル

素因数2、3、5のみを含む数は醜い数と呼ばれます。たとえば、6と8はどちらも醜い数ですが、14は素因数7が含まれているためではありません。伝統的に、私たちは1を最初の醜い数字と見なします。N番目の醜い数字を昇順で見つけます。

2、分析とコード

1.位置をマークして順番に解決します

(1)考える

醜い数には素因数2、3、5しか含まれていないので、醜い数はこれら3つの因子を昇順で掛け合わせることで得られます。
計算プロセスでは、次の醜い数は、生成された醜い数に2、3、または5を掛けたものであり、生成された醜い数の配列が順序付けられます。3つのマークを設計して、最新の時刻と各要素をそれぞれ記録できます。位置を乗算します。必要な醜い数を生成するために使用されるデータの、それによって繰り返される操作を回避します。

(2)コード

import java.util.*;
public class Solution {
    
    
    public int GetUglyNumber_Solution(int index) {
    
    
        if (index <= 0)
            return 0;
        ArrayList<Integer> uglyNums = new ArrayList<>();
        uglyNums.add(1);
        
        int i2 = 0, i3 = 0, i5 = 0;
        int num2 = uglyNums.get(i2++) * 2;
        int num3 = uglyNums.get(i3++) * 3;
        int num5 = uglyNums.get(i5++) * 5;
        
        for (int i = 1; i < index; i++) {
    
    
            int num = Math.min(num2, Math.min(num3, num5));
            uglyNums.add(num);
            if (num == num2)
                num2 = uglyNums.get(i2++) * 2;
            if (num == num3)
                num3 = uglyNums.get(i3++) * 3;
            if (num == num5)
                num5 = uglyNums.get(i5++) * 5;
        }
        return uglyNums.get(index - 1);
    }
}

(3)結果

実行時間:21ms、占有メモリ:9532k。

3、その他

何もありません。

おすすめ

転載: blog.csdn.net/zml66666/article/details/108987521