剑指 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
是丑数。n
不超过1690。
解析:
2的次方,3的次方,5的次方,组合即可
然后放到set里,再遍历
很少,不会超时,只需要注意越界即可
class Solution { public: set<long long> ss; int nthUglyNumber(int n) { vector<long long> nums[3]; const unsigned long long maxn = 2147483647; long long a = 1, b = 1, c = 1; nums[0].push_back(1); nums[1].push_back(1); nums[2].push_back(1); for(int i = 1; i < 31; i++) { if(a * 2 <= maxn) { a *= 2; nums[0].push_back(a); } if(b * 3 <= maxn) { b *= 3; nums[1].push_back(b); } if(c * 5 <= maxn) { c *= 5; nums[2].push_back(c); } } for(int i = 0; i < nums[0].size(); i++) { long long a = nums[0][i]; for(int j = 0; j < nums[1].size(); j++) { long long b = nums[1][j]; for(int k = 0; k < nums[2].size(); k++) { long long c = nums[2][k]; if((unsigned long long)(a * b) <= maxn && (unsigned long long)(a * c) <= maxn && (unsigned long long)(b * c) <= maxn && (unsigned long long)(a * b * c) <= maxn) { ss.insert(a * b * c); } } } } ss.insert(1); int m = 0; long long ret; for(set<long long>::iterator it = ss.begin(); it != ss.end(); it++) { m++; if(m == n) { ret = *it; break; } } return ret; } };
自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
2021-07-22 手写数字识别多层网络
2019-07-22 图论题思考过程
2019-07-22 Java容器部分用法
2019-07-22 数论知识简易总结
2018-07-22 Race to 1 UVA - 11762 (记忆dp概率)
2018-07-22 Expect the Expected UVA - 11427(概率dp)
2018-07-22 Tribles UVA - 11021(全概率推论)