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.
题目链接:https://leetcode.com/problems/ugly-number-ii/
题目分析:用一个uglyNum数组记录,保证按升序构造,用当前的每个丑数,分别乘2,3,5其中比最大的大的最少的就是当前的下一个丑数,递推时间复杂度O(n)
public class Solution {
public int Min3(int a, int b, int c) {
return Math.min(a, Math.min(b, c));
}
public int nthUglyNumber(int n) {
int[] uglyNum = new int[n + 5];
uglyNum[1] = 1;
int i = 1, i2 = 1, i3 = 1, i5 = 1, cur;
while(i <= n) {
cur = Min3(uglyNum[i2] * 2, uglyNum[i3] * 3, uglyNum[i5] * 5);
if(cur == uglyNum[i2] * 2) {
i2 ++;
}
if(cur == uglyNum[i3] * 3) {
i3 ++;
}
if(cur == uglyNum[i5] * 5) {
i5 ++;
}
uglyNum[++ i] = cur;
}
return uglyNum[n];
}
}