题目:
请看题
分析:
对于丑数的理解,就是一个数的只是由 2 ,3 ,5 三个数 任意 相乘得到的。其中 1 也是一个丑数。
笔者是一个新手,刚开始的想法就很单纯,就是一个数一个数的进行计算,如果这个数的因数除了1和它本身,只有 那三个数的话,就让它进入数组中。但写出来后就很尴尬,因为这种方法实在不需要动脑子,它需要花费大量时间去计算,导致提交的时候总是显示编译时间过长。
然后呢,我就去想其他方法,于是乎,就用了这个三指针法。
随机给一个整数n,输出第n个丑数,很容易让人想到用动态数组去盛放。
接下来就是给数组添加丑数。
三指针法最大的优势,就是能迅速得到想要的数组。每次进行三次计算,获取一个丑数,以此进行n-1次(第一个丑数可以初始化为1)。
三指针法:
首先,定义三个指针并初始化指向第一个有初始值的丑数 1 ,用指针指向的丑数分别乘以 2 3 5,
的到一组结果,将获得结果中最小的数值放入丑数数组中,
并将获取该数据对应的所有(这个必须只要符合条件就执行,为的是避免重复获取某个值)下标+1(也就是指向下一个丑数)。
代码:
#include <iostream>
#include <vector>