ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

day29

2022-07-25 22:31:51  阅读:111  来源: 互联网

标签:day29 int res ++ while return dp


剑指 Offer 49. 丑数

 1)会超时,数据范围只能到1200几

 1 class Solution {
 2 public:
 3     int nthUglyNumber(int n) {
 4       int k = 0,res;
 5       for(int i = 1;;i ++){
 6          if(isUglyNum(i)) k ++;
 7          if(k == n){
 8              res = i;
 9              break;
10          }  
11       }
12       return res;
13     }
14 
15 private:
16     bool isUglyNum(int n){
17         while(n > 1){
18             int tmp = n;
19             while(n % 5 == 0)  n /= 5;
20             while(n % 3 == 0)  n /= 3;
21             while(n % 2 == 0)  n /= 2;
22             if(tmp == n) break;
23         }
24         if(n == 1)  return true;
25         return false;
26     }
27 };

 2)dp[a] * 2  、dp[b] * 3  和 dp[c] * 5 要时刻保持它们是在dp[i]后离它最近的三个数,然后每次取其中最小的一个

 https://leetcode.cn/leetbook/read/illustration-of-algorithm/9hq0r6/
 1 class Solution {
 2 public:
 3     int nthUglyNumber(int n) {
 4       int a = 0,b = 0,c = 0;
 5       int dp[n];
 6       dp[0] = 1;
 7       for(int i = 1;i < n;i ++){
 8           int l = dp[a] * 2,m = dp[b] * 3,n = dp[c] * 5;
 9           dp[i] = min(min(l,m),n);
10           if(dp[i] == l)  a ++;
11           if(dp[i] == m)  b ++;
12           if(dp[i] == n)  c ++;
13       }
14       return dp[n - 1];
15     }
16 };

 

标签:day29,int,res,++,while,return,dp
来源: https://www.cnblogs.com/balabalabubalabala/p/16519098.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有