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];
}
}

本文介绍了一种求解第N个丑数的有效算法。丑数是指只包含质因数2、3和5的正整数。通过动态规划的方法,使用最小值选择策略,确保了时间复杂度为O(n)。
1587

被折叠的 条评论
为什么被折叠?



