264. Ugly Number II
Medium
1075
71
Favorite
Share
Write a program to find the n-th ugly number.
Ugly numbers are positive numbers whose prime factors only include 2, 3, 5.
Example:
Input: n = 10
Output: 12
Explanation: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 is the sequence of the first 10 ugly numbers.
Note:
1 is typically treated as an ugly number.
n does not exceed 1690.
题意
求第n个“丑数”。丑数的定义是质因子只有2,3,5的数。
思路
三指针,指针i,j,k分别指向*2, *3, *5的候选丑数,比较大小取最小的赋值给cur指向的当前位置,注意ugly[i] * 2 == ugly[j] * 3之类的情况。
代码
class Solution {
public int nthUglyNumber(int n) {
if (n == 0) {
return 0;
}
int[] ugly = new int[n];
ugly[0] = 1;
int i = 0, j = 0, k = 0, cur = 1, pre = 0;
while (cur < n) {
int i2 = 2 * ugly[i] == pre? 2 * ugly[++i]: 2 * ugly[i], j3 = 3 * ugly[j] == pre? 3 * ugly[++j]: 3 * ugly[j], k5 = 5 * ugly[k] == pre? 5 * ugly[++k]: 5 * ugly[k];
if (i2 <= j3 && i2 <= k5) {
ugly[cur] = i2;
++i;
} else if (j3 <= i2 && j3 <= k5) {
ugly[cur] = j3;
++j;
} else {
ugly[cur] = k5;
++k;
}
// for (int u: ugly) {
// System.out.print(u + ", ");
// }
// System.out.println();
pre = ugly[cur++];
}
return ugly[n-1];
}
}