题目来自几个面试经典算法题Java解答(http://www.cnblogs.com/sunniest/p/4596182.html)题目十
丑数是质因数只有2、3或5的数,1是第一丑数。
下文中我的算法与原作者给出的不同,我的算法时间复杂度比原作者的高出很多。下一篇会给出原作者的算法。
public class UglyNumber {
public boolean isUglyNumber(int n){
if(n < 1){
return false;
}
if(n == 1){
return true;
}
while(n % 2 == 0){
n /= 2;
}
while(n % 3 == 0){
n /= 3;
}
while(n % 5 == 0){
n /= 5;
}
if(n == 1){
return true;
}else{
return false;
}
}
public int uglyNumber(int c){
if(c <= 0){
return -1;
}
if(c == 1){
return 1;
}
int count = 1;
int number = 2;
while(count < c){
if(isUglyNumber(number)){
count++;
number++;
}else{
number++;
}
}
number--;
return number;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
UglyNumber un = new UglyNumber();
long start = System.currentTimeMillis();
System.out.println(un.uglyNumber(1500));
long end = System.currentTimeMillis();
System.out.println(end - start);
}
}