leetcode第70题 爬楼梯 动态规划算法(DP):递归,滚动数组写法

这篇博客探讨了如何使用深度优先搜索(DFS)和动态规划(DP)算法来解决爬楼梯问题。作者首先展示了DFS的实现,然后通过递归和滚动数组的方式解释了动态规划的解决方案。在讨论中,作者指出了递归方法在处理较大数值时可能导致超时的问题,并提出滚动数组优化来降低时间复杂性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题干:

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

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

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

DFS算法

class Solution(object):
    def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        DFS
        """
        re=[0]
        def DFS(curr_stairs):
            if curr_stairs==0:
              re[0]+=1
            elif curr_stairs<0:
                pass
            else:
                DFS(curr_stairs-1)
                DFS(curr_stairs-2)
        DFS(n)
        return re[0]
a=Solution()
print a.climbStairs(10)

动态规划(DP)算法

递归写法:

class Solution(object):
    def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        DFS
        """
        def DP(curr_stairs):
            if curr_stairs==1:
                return 1
            elif curr_stairs==0:
                return 1
            else:
                return DP(curr_stairs-1)+DP(curr_stairs-2)

        return DP(n)

到了38就超时!本质上还是一样的开销啊!递归写法不行开销太大

class Solution(object):
    def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        DFS
        """
        def DP(n):
            i=1#DP(0)=1
            j=1#DP(1)=1
            k=#DP(1)=1,为了防止n=1不进入循环,导致k没有值
            for m in range(n-1):#滚动数组,这里都可以不用数组
                k=i+j
                i=j
                j=k
            return k
        return DP(n)

滚动数组写法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值