剑指 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。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/chou-shu-lcof
代码实现
class Solution {
public:
int nthUglyNumber(int n) {
vector<int> uglyNum;
int a_ind = 0;
int b_ind = 0;
int c_ind = 0;
uglyNum.push_back(1);
for(int i = 1; i < n; i++) {
int tmp = min(uglyNum[a_ind] * 2, uglyNum[b_ind] * 3, uglyNum[c_ind] * 5);
if(tmp == uglyNum[a_ind] * 2) a_ind++;
if(tmp == uglyNum[b_ind] * 3) b_ind++;
if(tmp == uglyNum[c_ind] * 5) c_ind++;
uglyNum.push_back(tmp);
}
return uglyNum[n - 1];
}
int min(int a, int b, int c) {
int min_ab = (a > b) ? b : a;
return (min_ab > c) ? c : min_ab;
}
};