[leetcode] Ugly Number II


public class Solution {

    public int nthUglyNumber(int n) {
        int[] ugly=new int[n+10];
        for(int i=1;i<7;++i){
            ugly[i]=i;

        }

//前六个数直接初始化

        if(n<7)
          return ugly[n];
        int u2=1,u3=1,u5=1;

        int time=7,t2=0,t3=0,t5=0;

//time是正在计算的 第time个丑数

        while(time<=n){
            for(int i=u2;i<time;++i){
                t2=ugly[i]*2;
                if(t2>ugly[time-1]){
                    u2=i;
                    break;
                }
            }
             for(int i=u3;i<time;++i){
                t3=ugly[i]*3;
                if(t3>ugly[time-1]){
                    u3=i;
                    break;
                }
            }
             for(int i=u5;i<time;++i){
                t5=ugly[i]*5;
                if(t5>ugly[time-1]){
                    u5=i;
                    break;
                }
            }
            int tmp1=t2<t3?t2:t3;
            int tmp2=tmp1<t5?tmp1:t5;
            ugly[time++]=tmp2;
        }
        return ugly[n];
    }
}

你可能感兴趣的:(java,LeetCode)