[Backtracking/DP]70. Climbing Stairs

  • 分类: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+记忆化递归小能手!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容