Write a program to find the n
-th ugly number.
Ugly numbers are positive numbers whose prime factors only include 2, 3, 5
. For example, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12
is the sequence of the first 10
ugly numbers.
Note that 1
is typically treated as an ugly number.
Hint:
isUgly
for every number until you reach the nth one. Most numbers are not ugly. Try to focus your effort on generating only the ugly ones.见题目中的提示,主要就是维持一个丑数序列,一个丑数一定是序列中比它小的丑数乘以2,3或5的结果。
Java:
// Runtime: 9 ms
public class Solution {
public int nthUglyNumber(int n) {
int[] num = new int[n];
num[0] = 1;
int n2 = 0;
int n3 = 0;
int n5 = 0;
int i = 1;
while (i < n) {
int ugly = Math.min(Math.min(num[n2] * 2, num[n3] * 3), num[n5] * 5);
num[i++] = ugly;
if (ugly == num[n2] * 2) {
n2++;
}
if (ugly == num[n3] * 3) {
n3++;
}
if (ugly == num[n5] * 5) {
n5++;
}
}
return num[n - 1];
}
}