Leetcode刷题(22)动态规划专题:爬楼梯(重新包装的斐波那契数列,动态规划使用三部曲总结)

您所在的位置:网站首页 奥数爬楼梯问题斐波那契 Leetcode刷题(22)动态规划专题:爬楼梯(重新包装的斐波那契数列,动态规划使用三部曲总结)

Leetcode刷题(22)动态规划专题:爬楼梯(重新包装的斐波那契数列,动态规划使用三部曲总结)

2024-07-05 22:12| 来源: 网络整理| 查看: 265

题目 70. 爬楼梯

在这里插入图片描述 在这里插入图片描述

难度:简单

题目分析:这道题是动态规划系列的第一个例题,因此,这里总结下使用动态规划的三部曲。 1. 定义数组 dp[n] 的含义,这个根据具体题目来赋予含义, 这道题是 台阶 n 拥有多少种走法 2. 找出更新数组的递归公式,比如这题是 d p [ n ] = d p [ n − 1 ] + d p [ n − 2 ] dp[n] = dp[n-1]+dp[n-2] dp[n]=dp[n−1]+dp[n−2], 这里含义是,台阶 n 可以是在 台阶 n-1 迈一步到达,也可以从台阶 n-2 迈两步到达。动态规划的含义就是充分利用之前的数据, 于是不难明白,dp[n-1] 和 dp[n-2]在计算dp[n]之前,取值必须刷新 3. 设置初始条件, 因为数组dp索引的含义是多少级楼梯,所以, n 要大于等于0。 当 n = 0 , 1 , n =0, 1, n=0,1,时,没法使用递推公式更新,因此呢,我们自己手算填入。

以上便是使用动态规划需要的三部曲。关键点是头两步,定义好数组代表的含义,以及找出递推公式,难点也正是这里。

适合使用动态规划的题目,一般都是问,最大值、最小值可以是多少,某某有多少种解法,这类题目,因此也可以使用基于队列的广度优先搜索(BFS)去做。使用动态规划,无法给出具体的操作,它只能告诉我们答案有多少。如果题目还需要输出具体步骤,那只能借助于BFS或DFS来求解。

1. 解法一:动态规划(正统解法) class Solution: def climbStairs(self, n: int) -> int: if n int: # 使用O(1)的空间 # 递推公式其实就是斐波那契数列 if n int: # 自然可以使用递归 def fn(n): if n


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3