python动态规划算法实例详解
如果大家对这个生僻的术语不理解的话,那就先听小编给大家说个现实生活中的实际案例吧,虽然现在手机是相当的便捷,还可以付款,但是最初的时候,我们经常会使用硬币,其中,我们如果遇到手中有很多*或者1块钱硬币,要怎么凑出来5元钱呢?这么一个过程也可以称之为动态规划算法,下面就来看下详细内容吧。
从斐波那契数列看动态规划
斐波那契数列:fn = fn-1 + fn-2 ( n = 1,2 fib(1) = fib(2) = 1)
练习:使用递归和非递归的方法来求解斐波那契数列的第 n 项
代码如下:
# _*_coding:utf-8_*_ def fibnacci(n): if n == 1 or n == 2: return 1 else: return fibnacci(n - 1) + fibnacci(n - 2) print(fibnacci(10)) # 55
如果看不懂上面模棱两可的介绍,还有下面直观的代码:
f(1) = 1 f(2) = 1 f(3) = f(1) + f(2) = 1+ 1 = 2 f(4) = f(3) + f(2) = 2 + 1 = 3 ... f(n) = f(n-1) + f(n-2)
实例扩展:
爬楼梯
假设你正在爬楼梯,需要n阶才能到达楼顶
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
如:
示例1:
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶
示例2:
输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶
解析:
如果给的两个示例看的不是特别清楚,你可以当阶梯为0,那么上楼梯方法0种这是必然,当阶梯只有1那么上楼梯方法只有1种:
当4个台阶:
输入:4
输出:4
1. 1阶 + 1阶 + 1阶 + 1阶
2. 2阶 + 2阶
3. 1阶 + 2阶 + 1阶
4. 2阶 + 1阶 + 1阶
5. 1阶 + 1阶 + 2阶
那么得到:
阶梯数 爬楼梯方法
0 0
1 1
2 2
3 3
4 5
...
如果感觉看的不明显可以推理一下5阶,6阶...
可以得到当我们想爬n阶楼梯,我们可以得到: p(n-1) + p(n-2) p为爬楼梯方法
class solution: def climbstairs(self, n: int) -> int: num_list = [0,1,2] if n==1: return num_list[1] elif n==2: return num_list[2] else: for i in range(3,n+1): num_list.append(num_list[i-1]+num_list[i-2]) print(num_list) return num_list[n] obj = solution() result = obj.climbstairs(10) print(result)
提交leetcode只击败了12.72%的人。通过优化
class solution: def climbstairs(self, n: int) -> int: a,b,c = 0,1,2 if n == 1: return b if n == 2: return c while n>0: c = a + b a,b = b,c n -= 1 return c obj = solution() result = obj.climbstairs(8)
到此这篇关于python动态规划算法实例详解的文章就介绍到这了,更多相关python动态规划算法是什么内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
上一篇: MySQL 如何修改root用户的密码
下一篇: 一篇文章教你用python画动态爱心表白
推荐阅读
-
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
-
PHP7.1中使用openssl替换mcrypt的实例详解
-
利用Python对文件夹下图片数据进行批量改名的代码实例
-
Python 微信之获取好友昵称并制作wordcloud的实例
-
centos编译安装mysql 5.6及安装多个mysql实例详解
-
JavaScript静态作用域和动态作用域实例详解
-
vue elementui el-form rules动态验证的实例代码详解
-
JS中数据结构与算法---排序算法(Sort Algorithm)实例详解
-
使用Vue.observable()进行状态管理的实例代码详解
-
Android快速开发系列 10个常用工具类实例代码详解