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); } };