← All Posts

爬楼梯

随缘刷,不计时(好像坚持时间断了

题目#

爬楼梯,每次只能爬一阶或两阶,问 n 阶楼梯有多少种爬法?

例: 2
解: 1 + 1; 2. 两种
例:3
解:1 + 1 + 12 + 11 + 2. 三种

原题传送门

思考#

从这题开始,刷 dp!

动态规划一般用于大问题拆解成小问题求解,例如极值等等(好像基本都是极值)

这题同理可以将问题拆解下,找出通用公式

1 阶: 1
2 阶: 2| 1 + 12
3 阶: 3| 1 + 1 + 12 + 11 + 2
4 阶: 5| 1+1+1+11+2+12+1+12+2
...

可以看到 第 n 阶的话,应该是 n - 1n - 2 的解法之和(类似斐波那契)

得出此解

function climb(n) {
const dp = Array.from({ length: n });
for (let i = 0; i < n; i++) {
if (i == 0 || i == 1) {
dp[i] = i + 1;
} else {
dp[i] = dp[i - 1] + dp[i - 2];
}
}
return dp[n - 1];
}

这和斐波那契一样 作为动态规划思想的入门是可以的