力扣 每日一题 丑数(三指针法)

本文介绍了如何使用三指针法解决力扣中的丑数问题。丑数是指只包含质因数2、3、5的自然数,1也被认为是丑数。在尝试了直接计算所有数的因数方法失败后,作者转向使用三指针法,通过维护三个指针分别乘以2、3、5来快速找到第n个丑数。这种方法能有效减少计算时间,避免编译超时。
摘要由CSDN通过智能技术生成

题目:

请看题
在这里插入图片描述

分析:

对于丑数的理解,就是一个数的只是由 2 ,3 ,5 三个数 任意 相乘得到的。其中 1 也是一个丑数。
笔者是一个新手,刚开始的想法就很单纯,就是一个数一个数的进行计算,如果这个数的因数除了1和它本身,只有 那三个数的话,就让它进入数组中。但写出来后就很尴尬,因为这种方法实在不需要动脑子,它需要花费大量时间去计算,导致提交的时候总是显示编译时间过长。
然后呢,我就去想其他方法,于是乎,就用了这个三指针法。
随机给一个整数n,输出第n个丑数,很容易让人想到用动态数组去盛放。
接下来就是给数组添加丑数。
三指针法最大的优势,就是能迅速得到想要的数组。每次进行三次计算,获取一个丑数,以此进行n-1次(第一个丑数可以初始化为1)。
三指针法:
首先,定义三个指针并初始化指向第一个有初始值的丑数 1 ,用指针指向的丑数分别乘以 2 3 5,
在这里插入图片描述

的到一组结果,将获得结果中最小的数值放入丑数数组中,
在这里插入图片描述

并将获取该数据对应的所有(这个必须只要符合条件就执行,为的是避免重复获取某个值)下标+1(也就是指向下一个丑数)。
在这里插入图片描述

代码:

#include <iostream>
#include <vector>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值