丑数

题目:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。求按从小到大的顺序的第1500个丑数。例如6、8都是丑数,但14不是,因为它不包含因子7。习惯上我们把1当作第一个丑数。

第一种方法:逐个判断每个整数是不是丑数的解法,直观但不够高效。

第二种方法:创建数组保存已经找到的丑数,用空间换时间的解法。

另外一种解法:参考剑指offer。

public class Ugly{
    public int getUgly(int index){
        if(index <= 0) return 0;
        int[] uglyNumbers = new int[index];
        uglyNumbers[0] = 1;
        int nextUglyIndex = 1;
        int multiply2 = 1;
        int multiply3 = 1;
        int multiply5 = 1;
        while(nextUglyIndex < index){
            int min = Min(multiply2*2,multiply3*3,multiply5*5);
            uglyNumbers[nextUglyIndex] = min;
            while(multiply2*2 <= uglyNumbers[nextUglyIndex]){
                ++multiply2;
            }
            while(multiply3*3 <= uglyNumbers[nextUglyIndex]){
                ++multiply3;
            }
            while(multiply5*5 <= uglyNumbers[nextUglyIndex]){
                ++multiply5;
            }
            ++nextUglyIndex;
        }
        int ugly = uglyNumbers[nextUglyIndex-1];
        return ugly;
    }
    public int Min(int number1,int number2,int number3){
        int min = (number1<number2)?number1:number2;
        min = (min<number3)?min:number3;
        return min;
    }
    public static void main(String[] args){
        Ugly u = new Ugly();
        int result = u.getUgly(1500);
        System.out.println(result);
    }
}
原文地址:https://www.cnblogs.com/yingpu/p/9252359.html