
AcWing 62 丑数
初始化一个向量 使用三个指针分别跟踪3个数列中的当前位置。 在每次循环中,计算三个数列中当前的最小值。 将这个最小值加入向量 重复上述步骤直到生成第n个丑数。 初始化:向量 循环生成丑数:在每次循环中,计算三个数列中的最小值(t1, t2, t3),然后将其加入向量 移动指针:根据当前生成的数判断来源(2、3、5的数列),并更新相应的指针。 返回结果:当生成到第n个丑数时,返回向量
发布日期:2021-05-28 16:30:49
浏览次数:30
分类:精选文章
本文共 1155 字,大约阅读时间需要 3 分钟。
为了解决丑数问题,我们可以使用三指针法,高效地找到第n个丑数。丑数是2、3和5的幂次乘积,因此可以通过归并排序的方式,逐步生成最小的丑数。
方法思路
丑数可以看作三个等差数列(被2、3、5分别整除的数)的并集。为了生成丑数,我们可以使用一个贪心算法,每次取三个数列中最小的数,并将其加入结果集中。具体步骤如下:
q
,存储已生成的丑数,初始值为1。q
中,并根据情况移动对应的指针。这种方法的时间复杂度是O(n),因为每次循环只需比较三个数,较为高效。
解决代码
#include#include class Solution { std::vector q; int i = 0, j = 0, k = 0; public: int getUglyNumber(int n) { q.push_back(1); // 初始丑数是1 while (q.size() < n) { int t1 = q[i] * 2; int t2 = q[j] * 3; int t3 = q[k] * 5; int t = std::min(t1, t2, t3); q.push_back(t); if (t == t1) { i++; } else if (t == t2) { j++; } else if (t == t3) { k++; } } return q.back(); }};
代码解释
q
初始化为1,作为起始的丑数。q
。q
中的最后一个元素。这种方法确保了我们能够在最少的操作次数内找到第n个丑数,非常高效且直接。
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月10日 23时38分47秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Python imageio方法示例
2021-05-17
Possible missing firmware
2021-05-17
算法的学习方式
2021-05-17
JAVA BigInteger和BigDecimal类常用方式
2021-05-17
深度学习框架 各种模型下载集合 -- models list
2021-05-17
双层卷积神经网络--tf
2021-05-17
six.move 的作用
2021-05-17
MySQL(九)SQL优化
2019-03-14
Django认证系统
2019-03-14
QT for MCU (一)开始
2019-03-14
机器学习全教程
2019-03-14
ubuntu配置环境变量(变量不重复)
2019-03-14
ubuntu 18.04LTS + MATLAB2018b启动opengl 硬件加速
2019-03-14
关于JS的数据类型
2019-03-14
idea在连接mysql数据库时区错误
2019-03-14
springboot中访问static下的图片没反应
2019-03-14
PHP文件域上传文件
2019-03-14
2021-05-14
2019-03-14