发布于 

剑指 Offer.49-丑数

剑指 Offer.49-丑数

题目链接

剑指 Offer 49. 丑数

问题描述

我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。

官方解法(动态规划)

需要使用一个推论,质数与质数的乘积还为质数,已知最小的质数为1,从最小的质数开始,分别将其与3个质因子相乘,取其中最小的1个,作为该步动态规划的最优解,下一个丑数的求解建立在上一个丑数的基础上,直至第n个数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public int nthUglyNumber(int n) {
int[] dp = new int[n];
// 声明3个坐标,乘以三个质因子
int a = 0 ,b = 0,c = 0;
dp[0] = 1;
for(int i=1;i<n;i++){
int xa = dp[a]*2;
int xb = dp[b]*3;
int xc = dp[c]*5;
dp[i] = Math.min(Math.min(xa,xb),xc);
if(xa == dp[i]) a++;
if(xb == dp[i]) b++;
if(xc == dp[i]) c++;
}
return dp[n-1];
}
}

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

本站由 @John Doe 创建,使用 Stellar 作为主题。