LeetCode--动态规划基础概念总结和经典题目解析汇总

本文总结了动态规划的概念,包括最优子结构和存储中间状态的关键点,并通过六道LeetCode题目(斐波那契数、不同路径、最长公共子序列、三角形最小路径和、最大子序和、零钱兑换)详细解析了动态规划的应用和解题思路。
摘要由CSDN通过智能技术生成

目录

Divide&Conquer + optimal substructure

动态规划关键点

题目一:斐波那契数

题目二:不同路径

题目三:最长公共子序列

题目四:三角形最小路径和

题目五:最大子序和

题目六:零钱兑换


Divide&Conquer + optimal substructure

1.动态规划和递归或者分治没有根本上的区别(关键看有无最优子结构)

2.共性:找到重复子问题

3.差异性:最优子结构,中途可以淘汰次优解

动态规划关键点

1.最优子结构

2.存储中间状态

3.递推公式(美其名曰:状态转移方程或者dp方程)

题目一:斐波那契数

(题目链接:https://leetcode-cn.com/problems/fibonacci-number/

斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:

F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1
给你 n ,请计算 F(n) 

思路:使用动态规划即动态递推

class Solution {
    public int fib(int n) {
        if(n < 2){return n;}
        int a = 0;
        int b = 1;
        int sum = 0;
        for(int i =2;i<=n;i++){
            sum = a+b;
            a = b;
            b = sum;
        }
        return sum;
    }
}

题目二:不同路径

(题目链接:https://leetcode-cn.com/problems/unique-paths/

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。

问总共有多少条不同的路径?

思路:从出发点有两种方案推进:1)要么往右走一步;2)要么往下走一步

也就是说每一个格子有多少种方案等于它右边格子的方案+它下面格子方案之和

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值