爬楼梯(js实现,LeetCode:70)
这道题可以先找规律:
台阶数 | 方法 | 方法数 |
0 | 0 | 0 |
1 | 1 | 1 |
2 | 1+1;0+2 | 2 |
3 | 1+1+1;1+2;2+1 | 3 |
4 | 1+1+1+1;1+2+1;1+1+2;2+2;2+1+1 | 5 |
..... | ........................ | n |
通过枚举发现规律:最后一步有可能跨了一级台阶,也有可能跨了两级台阶,f(n)为爬到n级台阶上的方法数,那么f(n)=f(n-1)+f(n-2),这正是斐波那契数列,有了这个公式可以写出代码:
/**
* @param {number} n
* @return {number}
*/
var climbStairs = function (n) {
let add_num = 1
let left_point = 0
let right_point = 0
for (let i = 1; i <= n; i++) {
left_point = right_point;
right_point = add_num;
add_num = left_point + right_point
}
return add_num
};
算法的时间复杂度为O(N),空间复杂度为O(1)