264. Ugly Number II
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, and n does not exceed 1690.
题目含义:这道题是 26. Ugly Number的扩展,要求我们找到第n个丑数
思路:
-
申请一个长度为n的数组uglyNumbers,用于从小到大顺序存储n个丑数,数组中的首项为1,即第一个丑数为1
-
设置三个变量idx2、idx3、idx5存储下标,初始值都为1
-
找出数组uglyNumbers[idx2]*2、uglyNumbers[idx3]*3、uglyNumbers[idx5]*5的最小值,最小值即为下一个丑数,同时更新最小值对应的下标,如果多个数字同时为最小值,则它们的下标都要更新
-
找到第n个丑数时,循环结束
public int GetUglyNumber_Solution(int index) { if(index<=6) return index; int[] dp = new int[index]; dp[0] = 1; int position2 = 0, position3 = 0, position5 = 0; for (int i = 1; i < index; i++) { dp[i] = Math.min(dp[position2] * 2, Math.min(dp[position3] * 3, dp[position5] * 5)); if (dp[i] == dp[position2] * 2) position2++; if (dp[i] == dp[position3] * 3) position3++; if (dp[i] == dp[position5] * 5) position5++; } return dp[index - 1]; }