题目:
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例:
输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶
思路:
斐波那契数列,也没啥好说的动态规划解决问题
你走到n位置的方法有f(n)种,这f( n )前一步要么是跨一级上来
要么是跨两级上来也就是f( n ) = f( n-1 ) + f( n-2 );
就很好做了
复杂度:
时间复杂度:O(n)
空间复杂度:O(1)
代码:
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];
}