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、その他
何もありません。