0️⃣python数据结构与算法学习路线
学习内容:
- 基本算法:枚举、排序、搜索、递归、分治、优先搜索、贪心、双指针、动态规划等…
- 数据结构:字符串(string)、列表(list)、元组(tuple)、字典(dictionary)、集合(set)、数组、队列、栈、树、图、堆等…
题目:
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
输入输出:
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1 . 1 阶 + 1 阶
2 . 2 阶
解题思路:
最后一步只有一种方法,最后两步只能有两种方法,去掉最后两步或一步之后递归
算法实现:
class Solution:
def climbStairs(self, n: int) -> int:
def dp(n):
if n==1:
return 1
if n==0:
return 1
return dp(n-1) + dp(n-2)
# dp = [0 for _ in range(46)]
dp=[1,1]
for i in range(2,46):
dp.append(dp[i-1]+dp[i-2])
return dp[n]
出现问题:
- 直接用递归会超时,可以先记录2-46的数值,每次读取减少计算时间