《剑指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一样。