42 lines
1.0 KiB
JavaScript
42 lines
1.0 KiB
JavaScript
/**
|
||
* @param {number} n
|
||
* @return {number}
|
||
*/
|
||
const climbStairs = function (n) {
|
||
|
||
};
|
||
|
||
/*
|
||
这个题目就是求斐波那契数列的现实抽象,我们的最终目的是跳到第n个台阶,而每一次要么跳一步,要么跳两步,
|
||
所以智能由n-1个台阶跳一步上来,或者由n-2个台阶跳两步上来,设dp[i]为跳转到这个台阶可能的方法,那么
|
||
dp[i] = dp[i-1] + dp[i-2]
|
||
*/
|
||
function f1(n) {
|
||
// 定义dp数组
|
||
const dp = Array(n + 1);
|
||
dp[1] = 1;
|
||
dp[2] = 2;
|
||
for (let i = 3; i <= n; i++) {
|
||
dp[i] = dp[i - 1] + dp[i - 2];
|
||
}
|
||
return dp[n];
|
||
}
|
||
|
||
/*
|
||
通过观察上面的代码可以知道,dp[i]的结果只由它的前一个位置和前前个位置有关,所以定义两个变量first和second来
|
||
保存这两个值
|
||
*/
|
||
function f2(n) {
|
||
if (n < 3) return n;
|
||
// 定义跳到前两个台阶可能的步数
|
||
let first = 1;
|
||
let second = 2;
|
||
let result = 1;
|
||
for (let i = 3; i <= n; i++) {
|
||
result = first + second;
|
||
first = second;
|
||
second = result;
|
||
}
|
||
return result;
|
||
}
|