假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
思路:
思路是动态规划
1) 爬n-1阶楼梯的方法数量,在爬1阶就可以到第n阶
2) 爬n-2 阶楼梯的方法数量,在爬2阶就可以到第n阶
可以得到公式
F[n] = F[n-1] + F[n-2]
初始化 F[0] = 1,F[1] = 1
动态规划:
1) 状态转移方程
2) 条件边界
3) 建立转态转移方程
注意:给定 n 是一个正整数。
class Solution {
public int climbStairs(int n) {
int [] dp = new int[n + 1];
dp[0] = 1;//走一步一种做法
dp[1] = 1;//走两步一种做法
for(int i = 2; i <= n ; i++){
dp[i] = dp[ i - 1] + dp[ i - 2];
}
return dp[n];
}
}