(M)Dynamic Programming:264. Ugly Number II

来源:互联网 发布:图片提取文字软件 编辑:程序博客网 时间:2024/05/17 00:59

这个题一开始我的做法是从1开始求这个数字是不是丑数,直到数到第n个,但是超时。看了大神的解法:

每个子列表都是一个丑陋数分别乘以2,3,5,而要求的丑陋数就是从已经生成的序列中取出来的,我们每次都从三个列表中取出当前最小的那个加入序列

class Solution {public:    int nthUglyNumber(int n) {        vector<int> res(1, 1);        int i2 = 0, i3 = 0, i5 = 0;        while (res.size() < n) {            int m2 = res[i2] * 2, m3 = res[i3] * 3, m5 = res[i5] * 5;            int mn = min(m2, min(m3, m5));            if (mn == m2) ++i2;            if (mn == m3) ++i3;            if (mn == m5) ++i5;            res.push_back(mn);        }        return res.back();    }};


原创粉丝点击