假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例 1:
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶
思路
当n=1时,只有一种方法,即走一个台阶;
当n=2时,有两种方法,每次都只走一个台阶,或者一次性走两个台阶。
当n>3时,可以从n-1处的台阶走爬1个台阶到n,也可以从n-2处的台阶爬2个台阶到n,因此第n台阶可以由前面两个台阶转移而来。
记f(n)为台阶数为n时,从楼底爬到楼顶的方法总数,则f(n)=f(n-1)+f(n-2),这是我们的状态转移方程。由于f(n)只与f(n-1)和f(n-2)有关,因此只需要定义两个变量即可。
class Solution {
public int climbStairs(int n) {
if(n==1){
return 1;
}
if(n==2){
return 2;
}
int f1=1;
int f2=2;
int ans=0;
for(int i=3;i<=n;++i){
ans=f1+f2;
f1=f2;
f2=ans;
}
return ans;
}
}