0%

Offer 49. 丑数

今日算法题。 1/3.


题目描述


我们把只包含质因子 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 作为基本数值,然后乘以 [i for i in n] ,然后使用 set 去重,接着使用一个 快速排序 就可以了。

结果使用的时候,出现了很多冗余的值,比如 14 其因数有 7 ,22 其因数有 11.

诸如此类,所以这个方法被排除了。


别人的解法


根据一句话。

任何丑数乘以 [2,3,5] 也是丑数。

所以,这套题其实是斐波那契函数的变种,后面的需要前面的数值求出。

由于,其是有顺序的,所以,在求的过程中需要技巧。

请我喝杯咖啡吧~