我们把只包含因子 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) {
long int dp[n + 1];
dp[0] = 0;
dp[1] = 1;
long int *n2, *n3, *n5;
n2 = n3 = n5 = &dp[1];
for(int i = 2; i <= n; i++) {
dp[i] = min(*n2 * 2, min(*n3 * 3, *n5 * 5));
if(*n2 * 2 == dp[i]) n2++;
if(*n3 * 3 == dp[i]) n3++;
if(*n5 * 5 == dp[i]) n5++;
}
return dp[n];
}
};