力扣(LeetCode) 70: 爬楼梯 - 解法思路

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

问题概述

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 12 个台阶。你有多少种不同的方法可以爬到楼顶呢?

解法 1:递归与记忆化

工作原理

使用递归和记忆化来避免重复计算相同的子问题:

class Solution:
    def climbStairs(self, n):
        memo = {}
        
        def helper(remaining):
            if remaining == 1:
                return 1
            if remaining == 2:
                return 2
            
            if remaining in memo:
                return memo[remaining]
            
            memo[remaining] = helper(remaining - 1) + helper(remaining - 2)
            return memo[remaining]
        
        return helper(n)

复杂度分析

  • 时间复杂度: O(n) - 每个子问题只解决一次
  • 空间复杂度: O(n) - 用于记忆化和递归栈

何时使用

  • 更直观的递归方法
  • 更容易理解递推关系
  • 适合学习递归和记忆化

解法 2:动态规划(迭代)(推荐)

工作原理

这个问题遵循斐波那契数列模式。到达第 n 阶的方法数等于到达第 n-1 阶和第 n-2 阶的方法数之和:

class Solution:
    def climbStairs(self, n):
        if n < 3:
            return n
        
        prev2 = 1
        prev1 = 2
        
        for i in range(3, n + 1):
            current = prev1 + prev2
            prev2 = prev1
            prev1 = current
        
        return prev1

复杂度分析

  • 时间复杂度: O(n) - 单次遍历台阶
  • 空间复杂度: O(1) - 只使用常数额外空间

何时使用

  • 推荐 - 最优空间复杂度
  • 最快的解法
  • 简单高效

对比

方法时间空间最佳适用
递归(记忆化)O(n)O(n)理解递归,更直观
动态规划(迭代)O(n)O(1)大多数情况,最优空间

总结

要到达第 n 阶,你可以从第 n-1 阶(走 1 步)或从第 n-2 阶(走 2 步)到达。因此,ways[n] = ways[n-1] + ways[n-2]。迭代 DP 解法是最优的,空间复杂度为 O(1)。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yaoh.wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值