leetcode的python实现 刷题笔记70:爬楼梯(动态规划)
假设你正在爬楼梯。需要 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 阶
[code]class Solution(object): def climbStairs(self, n): """ :type n: int :rtype: int """ current = [0] * (n + 1) current[0] = 1 current[1] = 1 for i in range(2, n + 1): current[i] = current[i - 1] + current[i - 2] return current sl = Solution() print(sl.climbStairs(3)) print(sl.climbStairs(5)) print(sl.climbStairs(7)) print(sl.climbStairs(9))
思路:
1.由题目我们可以知道,当你爬到第n个楼梯的时候,你有两种选择,第一种是从第n-1个楼梯上走1个楼梯,第二种是从第n-2个楼梯上走2个楼梯.因此我们可以得到这样的一个式子:f(n)=f(n-1)+f(n-2)。
2.所以我们可以定义一个长度为n+1的数组,用来存放不同的数字相对应的解决方案,这里要注意的是当楼梯长度等于0或者1 的时候我们都看作是只有一种走法。
总结:
1.斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)
2.尽量不使用递归的方法,因为递归会占用过多的存储空间和运行时间。
3.所有递归的方法都可以转化成非递归的方法,也就是动态规划
4.动态规划:通过把大问题分解为相对简单的子问题的方式求解复杂问题的方法。适用于有重叠子问题和最优子结构性质的问题
5.思想:将大问题分解成小问题,然后合并小问题的解,进而得到大问题的解。实际上就是解决了小问题之后,把小问题的解存储成一个表,当要使用的时候就查表,直接调用之前的到的结果。
6.动态规划和分治法的思想很类似,都是把化大为小,逐个击破。区别在于分治法分成的小问题都是相互独立的,需采用递归的做法,而动态规划分成的小问题之间有一定的联系,可以通过查找来直接使用。
阅读更多- Leetcode 70 Climbing Stairs 爬楼梯的方法(动态规划)
- LeetCode 70 Climbing Stairs(Python详解及实现)
- LeetCode 70 Climbing Stairs--Python实现
- LeetCode 70 Climbing Stairs(爬楼梯)(动态规划)(*)
- LeetCode 70 Climbing Stairs(爬楼梯)(动态规划)(*)
- Python笔记——排序算法的实现
- 【学习笔记】用python实现bubblesort以及shakersort
- 《 Head First 》学习笔记:观察者模式 (python实现)
- 《 Head First 》学习笔记:策略模式 (python实现)
- 《 Head First 》学习笔记:装饰者模式 (python实现)
- Python的levelDB实现——实习笔记
- [LeetCode]4 Add Two Numbers(C++,Python实现)
- python学习笔记(三) 实现switch,内建函数,模块和包
- Python实现各类数据结构和算法---动态规划之最长公共子序列
- [LeetCode]2 Median of Two Sorted Arrays (C++,Python实现)
- [LeetCode]3 Longest Substring Without Repeating Characters (C++,Python实现)
- Python笔记——排序算法的实现
- python笔记-Twisted 实现简单的服务器客户端程序
- 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 用C++/lua/python/bash的四重实现(4)二分搜索算法