今日算法题。 1/3.
- python3
- Offer 49. 丑数
题目描述
我们把只包含质因子 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] 也是丑数。
所以,这套题其实是斐波那契函数的变种,后面的需要前面的数值求出。
由于,其是有顺序的,所以,在求的过程中需要技巧。