题目描述:
把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
分析:、
每一个丑数必然是由之前的某个丑数与2,3或5的乘积得到的,这样下一个丑数就用之前的丑数分别乘以2,3,5,找出这三种最小的并且大于当前最大丑数的值,即为下一个要求的丑数。
java代码实现:
private static int GetUglyNumber(int index) {
if(index <= 0)
return 0;
int [] uglynumbers = new int[index];
uglynumbers[0] = 1;
int nextugly = 1;
int index2 = 0;
int index3 = 0;
int index5 = 0;
while(nextugly < index) {
int min = Min(uglynumbers[index2]*2, uglynumbers[index3]*3, uglynumbers[index5]*5);
uglynumbers[nextugly] = min;
while(uglynumbers[index2]*2 <= uglynumbers[nextugly])
index2++;
while(uglynumbers[index3]*3 <= uglynumbers[nextugly])
index3++;
while(uglynumbers[index5]*5 <= uglynumbers[nextugly])
index5++;
nextugly++;
}
return uglynumbers[nextugly - 1];
}
private static int Min(int num1,int num2, int num3) {
int min = (num1 < num2) ? num1:num2;
return (min < num3) ? min:num3;
}