/**
* 本质是斐波拉契数问题
* 这个循环代替递归的问题在之前已经讲过
* 而爬楼梯问题的本质是分解为 每节楼梯的可能数
* 都是从最近一次一步爬上来的可能数和最近一次两步爬上来的可能数的和
* 用数学公式就是f(n) = f(n-1)+f(n-2)
* 因为一次只能走一步或者两步,所以能爬上这节楼梯只有两种可能
* 就是最后一步是一步爬上来的或是两步爬上来的
* 那么所有的可能数就是上面一步爬上来之前的可能数加上两步爬上来之前的哪个可能数
* @param n
* @return
*/
public int climbStairs(int n) {
if(n<=2){
return n;
}
int f1=1;
int f2=2;
int f = f1 + f2;
while (n>3){
f1=f2;
f2=f;
f = f1+f2;
n--;
}
return f;
}
leetcode爬楼梯
最新推荐文章于 2023-01-30 09:52:32 发布