力扣264. 丑数 II

给你一个整数 n ,请你找出并返回第 n 个 丑数 。丑数 就是质因子只包含 2、3 和 5 的正整数。

//用一个数组来保存第1到第n个丑数
//一个丑数必须是乘以较小的丑数的 2、3 或 5来得到。
//使用三路合并方法:L2、L3 和 L5三个指针遍历2、3、5倍的丑数序列。
//假设你有第 k 个丑数,那么 第k+1 个必须是 Min(L1 * 2, L2 * 3, L3 * 5)。
//1 通常被视为丑数
class Solution {
public:
    int nthUglyNumber(int n) {
        vector<int> ans;
        ans.push_back(1);
        int i = 0, j = 0, k = 0;
        for (int a = 1; a < n; a++) {
            int u1 = 2 * ans[i];
            int u2 = 3 * ans[j];
            int u3 = 5 * ans[k];
            ans.push_back(min(u1, min(u2, u3)));
            if (ans[a] == u1)
                i++;
            if (ans[a] == u2)
                j++;
            if (ans[a] == u3)
                k++;
        }
        return ans[n - 1];
    }
};

时间复杂度:O(n)
空间复杂度:O(n)

你可能感兴趣的:(leetcode,算法,数据结构)