标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。