LeetCode70. 爬楼梯(Python+Golang)
题目
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
方法分析
1.递归->自上而下(超出时间限制)
2.dp->自下而上(推荐)
Python实现(递归)
class Solution:
def climbStairs(self, n: int) -> int:
if n<=2:return n
return self.climbStairs(n-1)+self.climbStairs(n-2)
Python实现(DP)
class Solution:
def climbStairs(self, n: int) -> int:
if n <=2:return n
res = [1,2]
for i in range(3,n+1):
res.append(res[i-2]+res[i-3])
return res[-1]
Golang实现(递归)
func climbStairs(n int) int {
if n<=2{
return n
}
return climbStairs(n-1)+climbStairs(n-2)
}
Golang实现(DP)
func climbStairs(n int) int {
if n<=2{
return n
}
res := []int{1, 2}
for i:=3;i<n+1;i++{
res = append(res,res[i-2]+res[i-3])
}
return res[n-1]
}