面试题丑数
丑数定义:所有因子中只包含2,3,5的数就称之为丑数。例如 6,8都是丑数,但是14就不是丑数了。因为14的因子里面有7。习惯上我们认为第一个丑数是1。求按照从小到大的顺序第N个丑数。
我们首先分析一下,因为丑数的因子里面只有2,3,5。所以一个丑数的组成必然是这样的,丑数 x = 2^a*3^b*5^c;
如果可以看明白这个等式的话,我们接下来的工作就简单了。首先,我们假设a,b,c都是0,然后按照大小的顺序来选择性对a,b,c增长就可以了。
代码如下:
public class UglyNumber {
public static void main(String[] args) {
System.out.println("GetUglyNumber_Solution(5) = " + GetUglyNumber_Solution(5));
}
public static int GetUglyNumber_Solution(int index) {
if (index == 1) {
return 1;
}
int index2 = 0;
int index3 = 0;
int index5 = 0;
int[] num = new int[index];
num[0] = 1;
for (int i = 1; i < index; i++) {
int uglyuNumber = Math.min(num[index2] * 2,
Math.min(num[index3] * 3, num[index5] * 5)
);
num[i] = uglyuNumber;
if (uglyuNumber == num[index2] * 2) {
index2++;
}
if (uglyuNumber == num[index3] * 3) {
index3++;
}
if (uglyuNumber == num[index5] * 5) {
index5++;
}
}
return num[index - 1];
}
}