264 Ugly Number II

除第一个数 1 外,所有的Ugly Number都是有较小的Ugly Number乘2,3,5得到的,

所以本题的关键就是在
1*2,2*2,3*2,4*2,5*2,6*2,8*2…
1*3,2*3,3*3,4*3,5*3,6*3,8*3…
1*5,2*5,3*5,4*5,5*5,6*5,8*5…
之中找到第n个数。

public static int nthUglyNumber(int n) {

        int []arr=new int[n];
        arr[0]=1;

        int i=0,j=0,k=0;
        int next=1;

        while(next<n){
            int min=Min(arr[i]*2,arr[j]*3,arr[k]*5);
            arr[next]=min;

            if(min==arr[i]*2)i++;
            if(min==arr[j]*3)j++;
            if(min==arr[k]*5)k++;

            next++;
        }

        return arr[n-1];
    }
    public static int Min(int a,int b,int c){
        int min=a;
        if(min>b)min=b;
        if(min>c)min=c;
        return min;
    }

你可能感兴趣的:(264 Ugly Number II)