剑指 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 };
复制代码

 

posted @   跳动的休止符  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示