来自LeetCode70:
解决思路:
这就是你一个类似fibonacci序列的式子,最后一次只能上一个台阶或者两个台阶,所以,f(n)=f(n-1)+f(n-2);
只有一个台阶需要上时有一种上的方法。
具体实施
方法1
:使用一个含有三个数组的动态数组:
初始值是[0,0,1]
数组不断更新迭代;第二个数赋值给第一个位置;第三个数赋值给第二个位置,第三个位置是前两个位置的数字之和。
返回第三个位置上的数字即可。
class Solution {
public int climbStairs(int n) {
//使用一个动态数组,数组中有三个数 分别是前n-2,n-1,n种方法的情况的个数,其中第n种是n-1和n-2的个数之和
int p=0;int q=0;int r=1;
for(int i=0;i<n;i++){
p=q;
q=r;
r=p+q;
}
return r;
}
}
方法二:
利用组合数学学过的求齐次方程的特征方程的方法;f(n)=f(n-1)+f(n-2)的其次方程可以写成: