算法63----丑数【动态规划】
一、题目:
编写一个程序,找出第 n
个丑数。
丑数就是只包含质因数 2, 3, 5
的正整数。
示例:
输入: n = 10
输出: 12
解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12
是前 10 个丑数。
说明:
1
是丑数。n
不超过1690。
思路:动态规划
t1,t2,t3三个变量记录乘以2,3,5的个数。如:
代码:
def nthUglyNumber(self, n): """ :type n: int :rtype: int """ ''' #超出时间限制 if n == 0: return 0 i = 1 while i < n+1: m = i while m != 1: if not m % 2: m = m // 2 elif not m % 3: m = m //3 elif not m % 5: m = m // 5 else: n += 1 break i +=1 return n ''' #动态规划 if n<=0: return 0 t1,t2,t3 = 0 , 0 , 0 res = [1] while len(res) < n: res.append(min(res[t1]*2,res[t2]*3,res[t3]*5)) if res[-1] == res[t1] * 2: t1 += 1 if res[-1] == res[t2] * 3: t2 += 1 if res[-1] == res[t3] * 5: t3 += 1 return res[-1]