4-2-高阶算法-动态规划
动态规划
动态规划(Dynamic Programming)是一种解决复杂问题的算法设计技术。它主要用于优化问题,即在给定的约束条件下,寻找最优解(最大值或最小值)。动态规划的核心思想是将复杂问题拆解为一系列子问题,并利用子问题的解来构建原问题的解。
class Solution:
def climbStairs(self, n: int) -> int:
'''
* 动态规划四部曲:
* 1.确定dp[i]的下标以及dp值的含义: 爬到第i层楼梯,有dp[i]种方法;
* 2.确定动态规划的递推公式:dp[i] = dp[i-1] + dp[i-2];
* 3.dp数组的初始化:因为提示中,1<=n<=45 所以初始化值,dp[1] = 1, dp[2] = 2;
* 4.确定遍历顺序:分析递推公式可知当前值依赖前两个值来确定,所以递推顺序应该是从前往后;
解释为什么dp[i] = dp[i-1] + dp[i-2]:以1为结尾或以为2结尾时,前面不管怎么走,
这两种情况都不会出现相同的状态,所以要累加;
'''
if n <= 2:
return n
# 定义范围
dp = [0]*(n+1)
# 初始值
dp[1],dp[2]=1,2
# 迭代
for i in range(3,n+1):
dp[i] = dp[i-1] + dp[i-2]
return dp[-1]
技术改变命运