《剑指offer》面试题49. 丑数

问题描述

我们把只包含因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。

示例:

输入: n = 10
输出: 12
解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。
说明:  

1 是丑数。
n 不超过1690。

代码

class Solution {
public:
    int nthUglyNumber(int n) {
        vector<int> ind(3,0),uglynum(n,1);
        int tmp,a,b,c;
        for(int i = 1;i < n; ++i)
        {
            a = uglynum[ind[0]]*2;
            b = uglynum[ind[1]]*3;
            c = uglynum[ind[2]]*5;
            tmp = min(a,min(b,c));
            if(tmp == a)++ind[0];
            if(tmp == b)++ind[1];
            if(tmp == c)++ind[2];
            uglynum[i] = tmp;
        }
        return uglynum[n-1];
    }
};

结果

执行用时 :16 ms, 在所有 C++ 提交中击败了39.94%的用户
内存消耗 :7.6 MB, 在所有 C++ 提交中击败了100.00%的用户

这个问题和leetcode 264. 丑数 II一样。

posted @ 2020-05-03 08:06  曲径通霄  阅读(81)  评论(0编辑  收藏  举报