leetcode 264 Ugly Number II

https://leetcode.com/problems/ugly-number-ii/discuss/591634/C%2B%2B-easy-O(n)-DP

一个丑数乘以2/3/5仍然是一个丑数;t2、t3、t5记录当前应该乘以2、3、5的数字的位置,选择乘积最小的一个。

class Solution {
public:
    int nthUglyNumber(int n) {
        vector<int> vec(n,1);
        int t2=0,t3=0,t5=0;
        for(int i=1;i<n;++i) {
            int tmp=min(vec[t2]*2,min(vec[t3]*3,vec[t5]*5));
            vec[i]=tmp;
            if(tmp==vec[t2]*2) ++t2;
            if(tmp==vec[t3]*3) ++t3;
            if(tmp==vec[t5]*5) ++t5;
        }
        return vec[n-1];
    }
};

 

posted @ 2020-05-08 09:59  qiujiejie  阅读(106)  评论(0编辑  收藏  举报