思路:以丑数来算出丑数。
static int getUglyNum4k(int k) {
int[] num = new int[k + 1];
num[0] = 1;
int numIndex = 1;
int num2Index = 0;
int num3Index = 0;
int num5Index = 0;
while (numIndex < k) {
int min = getMin(num[num2Index] * 2, num[num3Index] * 3, num[num5Index] * 5);
num[numIndex] = min;
while (num[num2Index] * 2 <= num[numIndex])
num2Index++;
while (num[num3Index] * 3 <= num[numIndex])
num3Index++;
while (num[num5Index] * 5 <= num[numIndex])
num5Index++;
++numIndex;
}
return num[k-1];
}
static int getMin(int k1, int k2, int k3) {
int temp = k1 < k2 ? k1 : k2;
temp = temp < k3 ? temp : k3;
return temp;
}
public static void main(String[] args) {
System.out.println(getUglyNum4k(1500));
}