丑数:只包含因子 2、 3、 5 的数称为丑数,例如 2 、 3 、 4 、 5 都是都是丑数,但是 7 、 14 不是丑数。现在求从小到大的第 num 个丑数,我们把 1 作为第一个丑数。 ———— 源自《剑指offer》
思路:最简单暴力的方法就是从 1 开始枚举,直接枚举到 第 num 个丑数,这是可行的,但是非常的耗时,比如第 1500 个丑数是 859963392,那么我们需要从 1 开始枚举到 859963392 ,这所需花费的时间让人惆怅啊 。
当然了,最简单暴力的往往都不是最好的,也不是面试官想看到的,毕竟这么简答暴力的东西,谁都能想到啊,并没什么技术含量。
所以我们需要更好的方法。因为丑数的因子只有 2 3 或者 5,所以丑数必定是 某个丑数 k 的 2倍、3倍、或者 5倍。
这样我们就不需要从 1 开始枚举了到第 num 个丑数 target,我们可以根据得到丑数来推导出下一个丑数,这样大大节省了时间,接下来就是该如何去找到 这个 丑数 k 。
我们需要一个辅助数组 arr 来存储我们找到的丑数,最笨的方法当然是每次从数组的第一个开始找 k ,使得它的 2倍 3倍 或者 5倍 大于当前的数组最大值。
当然 k 的值不