题目描述:
题解一:递归
爬楼梯的方法存在以下规律:
n=1时,只有一种方法
n=2时,有两种方法
n>2时,可以先走一个台阶或者走两个台阶,因此方法数等于n-1个台阶的方法和n-2个台阶的方法数量之和。
class Solution(object): def climbStairs(self, n): if n==1: return 1 elif n==2: return 2 else: return self.climbStairs(n-1)+self.climbStairs(n-2)
但是提交超时,因此改进使用动态规划方法,与递归相比,动态规划是记录已经计算过的结果,避免重复计算
题解二:动态规划
一个台阶n=1时,只有一种方法 1
两个台阶n=2时,有两种方法:1 1,2
三个台阶n=3时,有三种方法:1 1 1,1 2,2 1
四个台阶n=4时,有五种方法:1 1 1 1,2 2,1 1 2,2 1 1,1 2 1
观察可以发现规律:res[i]=res[i-2]+res[i-1]
class Solution(object): def climbStairs(self, n): if n==1: return 1 res = [0 for i in range(n+1)] res[1] = 1 res[2] = 2 for i in range(3,n+1): res[i]=res[i-1]+res[i-2] return res[n]