LeetCode70. 爬楼梯 | 刷题打卡

210 阅读1分钟

昨天跑了地下城救公主,今天爬爬楼梯冷静下!

一、题目描述

难度 简单

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 12 个台阶。你有多少种不同的方法可以爬到楼顶呢?

注意:给定 n 是一个正整数。

示例 1:

输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1.  1 阶 + 1 阶
2.  2 阶

示例 2:

输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1.  1 阶 + 1 阶 + 1 阶
2.  1 阶 + 2 阶
3.  2 阶 + 1 阶

二、思路分析

这个题很明显,可以用动态规划来解

题目唯一的条件时每次可以爬 12 个台阶

假设n = 4;那最后一步可以是从第 2 个台阶或第 3 个台阶上去,即f(4) = f(3) + f(2);

那问题就变成了爬到第 2 个台阶和爬到第 3 个台阶有多少种方法?

同样的,第 3 个台阶可以从第1 个台阶或者第2 个台阶上去,即f(3) = f(2) + f(1);

所以就有了公式f(n) = f(n-1) + f(n-2);

n = 1开始,确定前两个就可以开始动态规划了

三、AC代码

var climbStairs1 = function (n) {
  let dp = Array.from(n + 1).fill(0);
  dp[1] = 1;
  dp[2] = 2;
  for (let i = 3; i <= n; i++) {
    dp[i] = dp[i - 1] + dp[i - 2];
  }
  return dp[n]
};