264. Ugly Number II

一开始用了list稍微有点慢。改用了数组好多了。这里我们是使用三个指针来惰性的计算下一个值,取出其中最小的值加入到数组,注意值可能会有重复,所以我们要对于得到的三个值都进行判断,相等则指针加一。

class Solution {
    public int nthUglyNumber(int n) {
        if(n==1) return 1;
        int[] result = new int[n];
        int pos1 =0;
        int pos2 =0;
        int pos3 =0;
        result[0]=1;
        for(int i = 1 ;i<n;i++)
        {
            int val1 = 2*result[pos1];
            int val2 =3*result[pos2];
            int val3 = 5*result[pos3];
            int smaller = val1<val2?val1:val2;
            int smallest = smaller<val3?smaller:val3;
            if(val1==smallest)
            {
               result[i]=val1;
               pos1++;   
            }
             if(val2==smallest)
            { 
               if(val2>result[i])
                  result[i]=val2;
               pos2++;
            }
              if(val3==smallest)
            {
                if(val3>result[i])
                    result[i]=val3;
                pos3++;
            }
        }
        return result[n-1];
    }
}```
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容