ugly-number-ii

https://www.lintcode.com/problem/ugly-number-ii/description

 

2 * (1,2,3,4,5....)

3 * (1,2,3,4,5....)

5 * (1,2,3,4,5....)

三个stream 的merge

class Solution {
public:

int f(int n, vector<int>& m) {
    if (n <= m.size()) {
        return m[n-1];
    }
    
    int si = 2;
    int i = 1;
    int sj = 3;
    int j = 1;
    int sk = 5;
    int k = 1;
    
    int nn = n;
    while (nn > 1) {
        if (si <= sj && si <= sk) {
            m.push_back(si);
            if (si == sj) {
                sj = 3 * m[j++];
            }
            if (si == sk) {
                sk = 5 * m[k++];
            }
            si = 2 * m[i++];
        }
        else if (sj <= si && sj <= sk) {
            m.push_back(sj);
            if (sj == si) {
                si = 2 * m[i++];
            }
            if (sj == sk) {
                sk = 5 * m[k++];
            }
            sj = 3 * m[j++];
        }
        else {
            m.push_back(sk);
            if (sk == si) {
                si = 2 * m[i++];
            }
            if (sk == sj) {
                sj = 3 * m[j++];
            }
            sk = 5 * m[k++];
        }
        --nn;
    }
    return m[n-1];
}
    /**
     * @param n: An integer
     * @return: return a  integer as description.
     */
    int nthUglyNumber(int n) {
        vector<int> m = {1};
        return f(n, m);
    }
};

 

posted @ 2019-03-10 22:47  Agentgamer  阅读(148)  评论(0)    收藏  举报