动态规划算法如何在python项目中实现?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
斐波那契数列: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项目中实现问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。