剑指offer:49.丑数
题目:
我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。
示例:
输入: n = 10
输出: 12
解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。
解析:
动态规划解析(c++):
un为保存丑数的数组,a,b,c为三个指针,如果是丑数就往+1。
class Solution {
public:
int nthUglyNumber(int n) {
vector<int> un(n);//保存丑数
int a, b, c;
a = b = c = 0;
un[0] = 1;//第一个丑数
for (int i = 1; i < n; ++i) {
int u1 = un[a] * 2, u2 = un[b] * 3, u3 = un[c] * 5;
un[i] = min(min(u1, u2), u3);//丑数为三者的最小值
//移动指针
if (un[i] == u1) ++a;
if (un[i] == u2) ++b;
if (un[i] == u3) ++c;
}
return un[n - 1];
}
};