題目描述
把只包含質因子2、3和5的數稱作醜數(Ugly Number)。例如6、8都是醜數,但14不是,因爲它包含質因子7。 習慣上我們把1當做是第一個醜數。求按從小到大的順序的第N個醜數。
題目分析
這個題目其實是素數篩的變種問題,只要按順序拿出所有的醜數就可以了。
java代碼
public int GetUglyNumber_Solution(int index) {
if(index<=0){
return 0;
}
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(1);
int N = 10000;
int i2 = 0;
int i3 = 0;
int i5 = 0;
int temp = 0;
for(int i=0;i<N;i++){
int x2 = arrayList.get(i2);
int x3 = arrayList.get(i3);
int x5 = arrayList.get(i5);
temp = Math.min(x2*2,Math.min(x3*3,x5*5));
if(temp == x2*2){
i2++;
}
if(temp == x3*3){
i3++;
}
if(temp == x5*5){
i5++;
}
arrayList.add(temp);
}
return arrayList.get(index-1);
}