剑指offer 50- 丑数

2021-05-30  本文已影响0人  顾子豪

我们把只包含质因子 2、3 和 5的数称作丑数(Ugly Number)。

例如 6、8
都是丑数,但 14 不是,因为它包含质因子 7

求第 n个丑数的值。
样例

输入:5

输出:5

注意:习惯上我们把 1当做第一个丑数。
分析:


一个三路归并的问题
第一路是包含质因子2的所有数的集合
第二路是包含3的质因子的所有数的集合
第三路是包含5的质因子的所有数的集合
但是可以看出,这三路是有交集的,所以需要去重,还有就是需要指出的是此为只包含2,3,5质因子的集合。
每一路的元素其实都在归并后的数组中,且这个数组可以保证其中的每个元素都是只包含2,3,5质因子。
时间复杂度:
O(N)


class Solution {
public:
    int getUglyNumber(int n) {
        if(n<=1) return n;
        vector<int> s(1, 1);
        int i = 0, j = 0, k = 0;
        while(--n) {
            int t = min(s[i]*2, min(s[j]*3, s[k]*5));
            s.push_back(t);
            if(s[i]*2 == t) i++;
            if(s[j]*3 == t) j++;
            if(s[k]*5 == t) k++;
        }
        return s.back();
    }
};
上一篇 下一篇

猜你喜欢

热点阅读