跳转至

70.climbing-stairs

Statement

Metadata
  • Link: 爬楼梯
  • Difficulty: Easy
  • Tag: 记忆化搜索 数学 动态规划

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

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

 

示例 1:

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

示例 2:

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

 

提示:

  • 1 <= n <= 45

Metadata
  • Link: Climbing Stairs
  • Difficulty: Easy
  • Tag: Memoization Math Dynamic Programming

You are climbing a staircase. It takes n steps to reach the top.

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

 

Example 1:

Input: n = 2
Output: 2
Explanation: There are two ways to climb to the top.
1. 1 step + 1 step
2. 2 steps

Example 2:

Input: n = 3
Output: 3
Explanation: There are three ways to climb to the top.
1. 1 step + 1 step + 1 step
2. 1 step + 2 steps
3. 2 steps + 1 step

 

Constraints:

  • 1 <= n <= 45

Solution

class Solution:
    f = {}

    def dfs(self, n: int) -> int:
        if n < 0:
            return 0
        if n == 0:
            return 1

        if n not in self.f.keys():
            self.f[n] = self.dfs(n - 1) + self.dfs(n - 2)

        return self.f[n]

    def climbStairs(self, n: int) -> int:
        return self.dfs(n)

最后更新: October 11, 2023
回到页面顶部