Python | 动态规划解决“返回第n个丑数”

问题描述给你一个整数 n ,请你找出并返回第 n 个 丑数 。丑数 就是只包含质因数 2、3 和/或 5 的正整数。示例 1:输入:n = 10输出:12解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。示例 2:输入:n = 1输出:1解释:1 通常被视为丑数。解决方案解决本题要用到的是动态规划,同时要先知道什么是丑数,题目也很明确的说明了丑数是什么,接下来就是实现在代码方面找到丑数,对于找丑数可以使用python的一次循环遍历就可以得到需要的丑数,因为只存在2,3,5这三个元素,遍历过程中不会太复杂;知道了如何判断丑数后就是进一步的丑数的变形方式,本题所使用的动态规划并不是太复杂的动态规划,这里要用到的新的变量“指针”(p2,p3,p5)此处pi是可以与i相乘的最小丑数的位置,设置了三个指针后从最小的开始,指针的移动表示在从大到小的寻找丑数,nums[i]是由三个指针乘以相应的数得到的,把相对应的pi + 1表示没有乘过次nums的最小丑数变大了,然后一个数一个数的加进数组中,直到遍历结束。具体代码如下:n = int(input())nums = [1]#放入第一个丑数1p2 = 0# 三个初始化指针p3 = 0p5 = 0for i in range(1, n):# 遍历n得到所有丑数ushu = min(nums[p2] * 2, nums[p3] * 3, nums[p5] * 5)# 从小到大,按照丑数定义收集丑数nums.append(ushu)# 将丑数放进结果数组中if(nums[i] == nums[p2] * 2): p2 += 1# 指针移动,从小到大地寻找丑数if(nums[i] == nums[p3] * 3): p3 += 1if(nums[i] == nums[p5] * 5): p5 += 1print(nums[n-1])  # 返回第n个丑数运行效果:

结语虽然是使用了动态规划的方式解决了本题,但对与动态规划还是处于模糊状态,还是会继续学习关于动态规划的知识,尽快熟悉并掌握运用,同时,做本题是要有一个清晰的思路,先得到什么,然后再做一步怎么样的操作。实习编辑:李欣容稿件来源:深度学习与文旅应用实验室(DLETA)

(0)

相关推荐

  • Python进阶系列:Python遍历的秘密

    前言 可迭代对象,迭代器,生成器,相信许多学习Python的小伙伴或多或少都听说过,但你真的知道他们的区别吗?真的知道为什么需要这些概念吗? 本文带你深入了解一系列相关机制,不仅告诉你概念,还告诉你为 ...

  • (1条消息) 动态规划就此一篇 全网最详细, 逐步理解, 万字总结

    文章目录 动态规划 - 超详细系列 首先,先大致列下这篇文章会讲到什么 1.相较于暴力解法,动态规划带给我们的是什么?为什么会有重叠子问题以及怎么去避免的? 2.用不同难度的动态规划问题举例说明, 最 ...

  • Python如何解决“高等数学”的问题?

    使用Python解决高等数学中极限.导数.偏导数.定积分.不定积分.双重积分等问题 Sympy是一个Python的科学计算库,它旨在成为功能齐全的计算机代数系统. SymPy 包括从基本符号算术到微积 ...

  • python:解决从字符串中提取省市区的问题

    需求 从发货订单的地址中,如下的字符串: "浙江省温州市永嘉县岩头镇芙蓉新村15栋" "温州XX永嘉县岩头镇芙蓉新村15栋" "浙江X永嘉县岩头镇芙蓉 ...

  • ArcGIS中用几行简单Python代码解决工作中字段计算问题

    原创 小祝 GIS前沿 2021-08-26 因为文本赋值或者进行加减法赋值固定位数的时候比较困难,使用这个代码的话就可以在文本型字段下进行9位数的流水号赋值: max = 121 #从某个号开始流水 ...

  • Python之函数返回值的示例代码详解

    文中通过示例代码介绍的非常详细,下面我们一起来看一下吧. 0x  00返回值简介 回顾下,上一节简单介绍了函数及其各种参数,其中也有简单介绍print和return的区别,print仅仅是打印在控制台 ...

  • Python|如何判断丑数

    问题描述编写一个程序判断给定的整数是否为丑数.丑数就是只包含质因数 2,3, 5 的正整数.说明:(1)1是丑数.(2)输入不会超过 32 位有符号整数的范围: [-2³¹,  2³¹-1].解决方案 ...

  • Python|动态规划问题--斐波那契数列

    斐波那契数列斐波那契数列其表达式如下: 递归算法通过公式我们不难看出,其第一项和第二项为1,当x>=3时,斐波那契数列的第x项就等于其前两项的和.所以我们可以得出代码如下:public stat ...

  • Python|动态规划之最大子序和

    题目描述给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和.示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组  ...

  • Python 注解+参数+返回值小结

    这篇文章偏记录类型,不是写的很细.我先说一下什么是注解,就是参数类型的显化操作,而且会给Python赋予一些静态语言的特性. User = strAge = int Answer = str # 其实 ...

  • 这个无法解决的数学问题,价值数千亿美元,超级计算机也无能为力

    最流行的计算机算法之一可能是SHA-256哈希函数.它是目前最流行.最强的加密函数之一.它非常强大,被用于比特币等加密货币.这是一个牢不可破的函数,由此产生的问题价值数千亿美元. 那么,是什么让这个哈 ...