Problem
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 first10
ugly numbers.
Note:
1
is typically treated as an ugly number.n
does not exceed 1690.
Code
public class Solution {
public int nthUglyNumber(int n) {
int[] ans = new int[n];
ans[0] = 1;
int index2 = 0, index3 = 0, index5 = 0;
for (int i = 1; i < n; ++i) {
int t2 = ans[index2] * 2;
int t3 = ans[index3] * 3;
int t5 = ans[index5] * 5;
int t = this.min(t2, t3, t5);
if (t2 == t) {
index2++;
}
if (t3 == t) {
index3++;
}
if (t5 == t) {
index5++;
}
ans[i] = t;
}
return ans[n - 1];
}
int min(int a, int b, int c) {
return this.min(a, this.min(b, c));
}
int min(int a, int b) {
return a < b ? a : b;
}
}