美文网首页动态规划
[Backtracking/DP]70. Climbing St

[Backtracking/DP]70. Climbing St

作者: 野生小熊猫 | 来源:发表于2019-02-09 06:31 被阅读0次
  • 分类:Backtracking/DP
  • 时间复杂度: O(n*m)

70. Climbing Stairs

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

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

Note: Given n will be a positive integer.

Example 1:

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

Example 2:

Input: 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

代码:

记忆化递归方法:

class Solution:
    def climbStairs(self, n: 'int') -> 'int':
        
        if n==0:
            return 0
        
        res=self.paths(n,{})
        
        return res
    
    def paths(self,n,memo):
        if n in memo:
            return memo[n]
        else:
            if n==0:
                return 1
            elif n==1:
                return 1
            else:
                memo[n]=self.paths(n-1,memo)+self.paths(n-2,memo)
                return memo[n]

DP方法:

class Solution:
    def climbStairs(self, n: 'int') -> 'int':
        
        if n==0:
            return 0
        
        res=[0 for i in range(n+1)]
        res[0]=1
        res[1]=1
        for i in range(2,n+1):
            res[i]+=(res[i-1])+(res[i-2])

        return res[-1]

讨论:

1.感觉今天自己完全搞懂了一种题型!DP+记忆化递归小能手!

相关文章

网友评论

    本文标题:[Backtracking/DP]70. Climbing St

    本文链接:https://www.haomeiwen.com/subject/zedasqtx.html