提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
描述
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
分析
问题的描述总结就是:爬楼梯,一次只能爬1节或者2节,总共n阶,一共有多少爬法。
推导
- 假设有1节楼梯:【1】
1种
- 假设有2节楼梯:【1】【1】、【2】
2种
- 假设有3节楼梯:【1】【1】【1】、【1】【2】、【2】【1】
3种
- 假设有4节楼梯:【1】【1】【1】【1】、【1】【1】【2】、【1】【2】【1】、【2】【2】、【2】【1】【1】
5种
- 假设有5节楼梯:【1】【1】【1】【1】【1】、【1】【1】【1】【2】、【1】【1】【2】【1】、【1】【2】【1】【1】、【2】【1】【1】【1】、【2】【2】【1】、【2】【1】【2】、【1】【2】【2】
8种
…
找规律
3=1+2
5=2+3
8=3+5
…
得出公式
解题
方法1:递归
class Solution {
public int climbStairs(int n) {
if (n==1) return 1;
if (n==2) return 2;
HashMap hashMap = new HashMap();
if (hashMap.get(n)!=null){
return (int) hashMap.get(n);
} else {
int m = climbStairs( n-2)+climbStairs(n-1);
hashMap.put(n,m);
}
return (int) hashMap.get(n);
}
}
方法2:循化
class Solution {
public int climbStairs(int n) {
if (n==1) return 1;
if (n==2) return 2;
int pre = 2 ;
int prePre = 1 ;
int result =0;
for (int i=3;i<=n;i++){
result =pre+prePre;
prePre= pre;
pre=result;
}
return result;
}
}