ACWING62. 丑数(剑指offer)

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

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

求第n个丑数的值。

样例
输入:5

输出:5
注意:习惯上我们把1当做第一个丑数。

思路:
数学归纳的思路。假设确定了第i个丑数,要确定第i+1个丑数,方法一定是从已有的丑数中抽取一个并与2,3,5中一个数相乘,结果要大于第i个质数,且结果最小。维护一个location数字,代表这个质数乘上对应位置的丑数后,结果大于第i个质数的最小位置。

class Solution {
public:
    int getUglyNumber(int n) {
        vector<int>ans;
        vector<int>prime(3);
        vector<int>location(3,0);
        prime[0] = 2;prime[1] = 3;prime[2] = 5;
        ans.push_back(1);
        for(int i = 1;i < n;i++) {
            int mi = 2e9;
            for(int j = 0;j < 3;j++) {
                while(prime[j] * ans[location[j]] <= ans[i - 1]) location[j]++;
                mi = min(mi,prime[j] * ans[location[j]]);
            }
            ans.push_back(mi);
        }
        return ans[n - 1];
    }
};
发布了844 篇原创文章 · 获赞 28 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/tomjobs/article/details/104965950