题目:
思路:
我们都明白,是一个一个找,然后添加到数组中。那么问题来了,如何精确的找到下一个?
答案是: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];
}
}