1. 丑数
把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。
示例:输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。
思路:
- 每个丑数 = 比其小的丑数 * 某个丑数因子(2,3,5)
class Solution { public int nthUglyNumber(int n) { // 使用动态规划 // 丑数因子 2, 3, 5 int a = 0, b = 0, c = 0; // 三个指针分别指向乘以某个因子刚好大于当前丑数的某个较小丑数 int[] dp = new int[n]; dp[0] = 1; for(int i=1;i<n;i++){ int dp2 = dp[a] * 2, dp3 = dp[b] * 3, dp5 = dp[c] * 5; dp[i] = Math.min(Math.min(dp2,dp3),dp5); if(dp[i] == dp2) a++; if(dp[i] == dp3) b++; if(dp[i] == dp5) c++; } return dp[n-1]; } }
