剑指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

class Solution(object):
    def nthUglyNumber(self, n):
        """
        :type n: int
        :rtype: int
        """
        p2 = 0
        p3 = 0
        p5 = 0
        dp = []
        dp.append(1)
        for i in range(n-1):
            dp.append(2)
        
        for i in range(1,n):
            dp[i]=min(dp[p2]*2,dp[p3]*3,dp[p5]*5)
            if(dp[i]==dp[p2]*2):
                p2+=1
            if(dp[i]==dp[p3]*3):
                p3+=1
            if(dp[i]==dp[p5]*5):
                p5+=1
       
        return dp[n-1];

 

上一篇:[LeetCode] 49. 字母异位词分组


下一篇:LeetCode 49-字母异位分组