参考文章:https://zhuanlan.zhihu.com/p/91582909
1、爬楼梯问题(leetcode 70题)
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例 1:
输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
- 1 阶 + 1 阶 + 1 阶
- 1 阶 + 2 阶
- 2 阶 + 1 阶
(1)、定义数组元素的含义
定义 dp[i] 的含义为:跳上一个 i 级的台阶总共有 dp[i] 种跳法
(2)、找出数组元素间的关系式
对于这道题,由于情况可以选择跳一级,也可以选择跳两级,所以到达第 n 级的台阶有两种方式
一种是从第 n-1 级跳上来
一种是从第 n-2 级跳上来
由于我们是要算所有可能的跳法的,所以有 dp[n] = dp[n-1] + dp[n-2]。
(3)、得出初始值
dp[0] = 0. dp[1] = 1. 即 n <= 1 时,dp[n] = n.
func claimStair(){
if n<=1{
return n
}
dp:=make([]int,n+1)
dp[1]=1
dp[2]=1
for (i:=3;i<=n;i++){
dp[i]=dp[i-1]+dp[i-2]
}
return dp[n]
}