我们把只包含因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。
示例:
输入: n = 10
输出: 12
解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。
考虑动态规划:当前项的值,是前面某一项的值乘 2,3,5
class Solution {
public int nthUglyNumber(int n) {
int[] res = new int[n];
res[0] = 1;
int p2 = 0;
int p3 = 0;
int p5 = 0;
for (int i = 1; i < n; i++) {
int r2 = 2 * res[p2];
int r3 = 3 * res[p3];
int r5 = 5 * res[p5];
res[i] = min(r2, r3, r5);
if (r2 == res[i]) p2++;
if (r3 == res[i]) p3++;
if (r5 == res[i]) p5++;
}
return res[n - 1];
}
private int min(int i1, int i2, int i3) {
int t = Math.min(i1, i2);
return Math.min(t, i3);
}
}
网友评论