package offer;
/**
* offer interview 34
*/
public class Test34 {
//method 1
private static boolean isUgly(int num){
while (num % 2 == 0){
num /= 2;
}
while (num % 3 == 0){
num /= 3;
}
while (num % 5 == 0){
num /= 5;
}
return num == 1;
}
public static int getUglyNumber(int index){
if (index <= 0){
return 0;
}
int num = 0;
int uglyFound = 0;
while (uglyFound < index){
num++;
if (isUgly(num)){
++uglyFound;
}
}
return num;
}
private static void test1(){
System.out.println(getUglyNumber(1));
System.out.println(getUglyNumber(2));
System.out.println(getUglyNumber(3));
System.out.println(getUglyNumber(4));
System.out.println(getUglyNumber(5));
System.out.println(getUglyNumber(6));
System.out.println(getUglyNumber(7));
System.out.println(getUglyNumber(8));
System.out.println(getUglyNumber(9));
System.out.println(getUglyNumber(10));
System.out.println(getUglyNumber(11));
System.out.println(getUglyNumber(1500));
System.out.println(getUglyNumber(0));
}
//method 2
public static int getUglyNumber2(int index){
if (index <= 0){
return 0;
}
int[] pUglyNumbers = new int[index];
pUglyNumbers[0] = 1;
int nextUglyIndex = 1;
int p2 = 0;
int p3 = 0;
int p5 = 0;
while (nextUglyIndex < index){
int min = min(pUglyNumbers[p2] * 2,pUglyNumbers[p3] * 3,pUglyNumbers[p5] * 5);
pUglyNumbers[nextUglyIndex] = min;
while (pUglyNumbers[p2] * 2 <= pUglyNumbers[nextUglyIndex]){
p2++;
}
while (pUglyNumbers[p3] * 3 <= pUglyNumbers[nextUglyIndex]){
p3++;
}
while (pUglyNumbers[p5] * 5 <= pUglyNumbers[nextUglyIndex]){
p5++;
}
nextUglyIndex++;
}
return pUglyNumbers[nextUglyIndex -1];
}
private static int min(int n1 ,int n2 ,int n3){
int min = n1 < n2 ? n1 : n2;
return min < n3 ? min : n3;
}
private static void test2(){
System.out.println(getUglyNumber2(1));
System.out.println(getUglyNumber2(2));
System.out.println(getUglyNumber2(3));
System.out.println(getUglyNumber2(4));
System.out.println(getUglyNumber2(5));
System.out.println(getUglyNumber2(6));
System.out.println(getUglyNumber2(7));
System.out.println(getUglyNumber2(8));
System.out.println(getUglyNumber2(9));
System.out.println(getUglyNumber2(10));
System.out.println(getUglyNumber2(11));
System.out.println(getUglyNumber2(1500));
System.out.println(getUglyNumber2(0));
}
public static void main(String[] args){
// System.out.println("Solution 1:");
// test1();
// System.out.println();
System.out.println("Solution 2:");
test2();
System.out.println();
}
}
=======
欢迎关注群聊: