假设你正在爬楼梯。需要 n
阶你才能到达楼顶。
每次你可以爬 1
或 2
个台阶。你有多少种不同的方法可以爬到楼顶呢?
思路分析:
当n=1时,只有一种爬法,当n=2时,可以一次走两阶也可以一阶一阶上,所以有二种走法
当n=3时,走法总和就是 n=1 n=2的总和
当n=4时,走法总和就是 n=2 n=3的总和
当n=5时,走法总和就是 n=3 n=4的总和
观察可发现,走法就是前一阶+前前阶的和
所以 sum=pre+pre_pre;
pre_pre=pre;
pre=sum;
class Solution {
public int climbStairs(int n) {
if(n==1) return 1;
if(n==2) return 2;
int pre=2;
int pre_pre=1;
int sum=0;
for(int i=3;i<=n;i++){
sum=pre+pre_pre;
pre_pre=pre;
pre=sum;
}
return sum;
}
}
(如果还不理解,可参考b站这个讲解:b站https://www.bilibili.com/video/BV11Y4y1q7YA?p=3&vd_source=d9b1309394e4a916a0067d97f5931fab