题干:
假设你正在爬楼梯。需要 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)
滚动数组写法
这篇博客探讨了如何使用深度优先搜索(DFS)和动态规划(DP)算法来解决爬楼梯问题。作者首先展示了DFS的实现,然后通过递归和滚动数组的方式解释了动态规划的解决方案。在讨论中,作者指出了递归方法在处理较大数值时可能导致超时的问题,并提出滚动数组优化来降低时间复杂性。
:递归,滚动数组写法&spm=1001.2101.3001.5002&articleId=121028734&d=1&t=3&u=95ded0ef32c64d95af6cd0ad164e2ca2)
979

被折叠的 条评论
为什么被折叠?



