題目:
思路:
我們都明白,是一個一個找,然後添加到數組中。那麼問題來了,如何精確的找到下一個?
答案是:a[n]從{a[0]到a[n-1]}*{2,3,5}中找到。
從a[0]到a[n-1],乘以2,然後找到剛剛大於a[n-1]的數字,記錄下來
從a[0]到a[n-1],乘以3,然後找到剛剛大於a[n-1]的數字,記錄下來
從a[0]到a[n-1],乘以5,然後找到剛剛大於a[n-1]的數字,記錄下來
從上面三個數中,找到最小的數字,就是a[n];
public class Solution {
public int GetUglyNumber_Solution(int index) {
if (index < 0)
return -1;
if (index >=0 && index <=6)
return index;
int numberChou =index-1;
int[] numChou = new int[numberChou];
// if (index ==1)
// return 1;
// if (index ==2)
// return 2;
// if (index ==3)
// return 3;
// if (index ==4)
// return 4;
// if (index ==5)
// return 5;
// if (index ==6)
// return 6;
numChou[0] =2;
numChou[1] =3;
numChou[2] =4;
numChou[3] =5;
for(int i=4;i<numberChou;i++){
int numTwo =2;
for (int j=0;j<i;j++){
numTwo =2 * numChou[j];
if (numTwo >numChou[i-1])
break;
}
int numThree =3;
for (int j=0;j<i;j++){
numThree = 3 * numChou[j];
if (numThree >numChou[i-1])
break;
}
int numFive =5;
for (int j=0;j<i;j++){
numFive = 5 *numChou[j];
if (numFive >numChou[i-1])
break;
}
int result = numTwo >numThree?numThree:numTwo;
result =result >numFive?numFive:result;
numChou[i]=result;
}
return numChou[numberChou-1];
}
}