其他分享
首页 > 其他分享> > 剑指 Offer 49. 丑数(动态规划)

剑指 Offer 49. 丑数(动态规划)

作者:互联网

剑指 Offer 49. 丑数

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

 

示例:

输入: n = 10
输出: 12
解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。

说明:  

  1. 1 是丑数。
  2. n 不超过1690。
 1 class Solution {
 2 public:
 3     int nthUglyNumber(int n) {
 4         // 这里当给定值非法时,返回-1
 5         if (n <= 0) {
 6             return -1;
 7         }
 8         vector<int> dp(n, 0);
 9         dp[0] = 1;
10         int a = 0;
11         int b = 0;
12         int c = 0;
13         for (int i = 1; i < n; i++) {
14             int n2 = dp[a] * 2;
15             int n3 = dp[b] * 3;
16             int n5 = dp[c] * 5;
17             dp[i] = min(min(n2, n3), n5);
18             if (n2 == dp[i]) {
19                 a++;
20             }
21             if (n3 == dp[i]) {
22                 b++;
23             }
24             if (n5 == dp[i]) {
25                 c++;
26             }
27         }
28         return dp[n - 1];
29     }
30 };

 

标签:丑数,12,Offer,int,49,n3,dp,10
来源: https://www.cnblogs.com/MGFangel/p/16339912.html