Leetcode.264.丑数II

原题链接:https://leetcode-cn.com/problems/ugly-number-ii/
利用动态规划的思想求第n个丑数。毫无疑问第一个丑数为1。所有的丑数必然是由以下式子构造而出:
u g l y = 2 i   × 3 j   × 5 k ugly = 2^{i}\ \times3^{j}\ \times 5^{k} ugly=2i ×3j ×5k
初始时, u g l y = 2 0   × 3 0   × 5 0 = 1 ugly = 2^{0}\ \times3^{0}\ \times 5^{0} =1 ugly=20 ×30 ×50=1,时初始解。
下一个解应该是2,3 ,5,选择一个最小的数,显然是2。
对于2(1 ,0,0),它的下一个值应该是在(3,5,2*2)中选择一个最小的,是3.下面给出python程序:

class Solution(object):
    def nthUglyNumber(self, n):
        """
        :type n: int
        :rtype: int
        """
        ugly = [0]*n
        ugly[0] = 1
        num2 = 0
        num3 = 0
        num5 = 0
        for i in range(1,n):
            ugly[i] = min(ugly[num2]*2, ugly[num3]*3,ugly[num5]*5)
            if ugly[i] / ugly[num2] == 2:
                num2 += 1
            if ugly[i] / ugly[num3] == 3:
                num3 += 1
            if ugly[i] / ugly[num5] == 5:
                num5 += 1
        return ugly[n-1]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值