leetcode动态规划系列
文章平均质量分 51
# leetcode动态规划系列
谜底广告歌
我迷恋的时光自天空倾倒
展开
-
leetcode64 最小路径和
题目中说了只能向下或者向右,那么就是:dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i][j]dp[i][j]表示走到grid[i][j]的时候最小路径和为dp[i][j]输入:grid = [[1,3,1],[1,5,1],[4,2,1]]除了dp[0][0]需要初始化之外,第一行和第一列也需要初始化,这道题现在看来会相对简单一些,使用动规五部曲直接分析一下就行。解释:因为路径 1→3→1→1→1 的总和最小。说明:每次只能向下或者向右移动一步。原创 2023-10-07 20:54:16 · 199 阅读 · 0 评论 -
leetcode 221 最大正方形 + 1277 统计全为1的正方形子矩阵
输入:matrix = [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]dp[i][j]:代码下标为i-1,j-1位置为右下角的正方形,最大面积为dp[i][j]。在是1的前提下,类似木桶原理,右下角位置的最长边长,取决于另外三个位置的最小距离,然后+1。给你一个 m * n 的矩阵,矩阵中的元素不是 0 就是 1,请你统计并返回其中完全由 1 组成的 正方形 子矩阵的个数。原创 2023-10-07 18:17:22 · 391 阅读 · 0 评论 -
leetcode动态规划之买卖股票+打家劫舍
刷题的时候发现这两种可以单独放出来总结下。原创 2023-10-01 20:12:03 · 162 阅读 · 0 评论 -
leetcode1027 最长等差数列
并且如果 seq[i+1] - seq[i]( 0原创 2023-07-03 23:11:53 · 120 阅读 · 0 评论 -
leetcode动态规划之背包系列
再除以2求出target;得先有点数学推导:所有的加号子集和为sum§,减号子集和为sum(q),则有sum§ - sum(q) = target(注,这里本身不带符号,比如sum§ = 5, sum(q) = 3, target = 2);则有:sum§ + sum(q) + (sum§ - sum(q) ) = sum§ + sum(q) + target。dp[j]表示在背包的容量为j的时候,放入物品后,背包最大重量为dp[j]dp[j]表示在背包的容量为j的时候,填满背包有dp[j]种方法。原创 2023-04-20 08:44:27 · 477 阅读 · 0 评论 -
leetcode动态规划之子序列问题汇总
若不相等(不相等为什么还要考虑呢),那就看看text1[0, i - 2]与text2[0, j - 1]的最长公共子序列 和 text1[0, i - 1]与text2[0, j - 2]的最长公共子序列,取最大的,即dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);根据上面的递推公式,dp[i][j]可以由dp[i-1][j-1] 和 dp[i-1][j]方向推到过来,也就是上方和左上方,那么第一行就需要初始化,这一行是某个字符串出现空字符串的个数,所以初始化为1。原创 2023-01-26 20:21:24 · 1005 阅读 · 0 评论 -
leetcode516 最长回文子序列
若不相同,那么需要看下单独加入哪个可以组成合适的子序列,比较后取最大值:dp[i][j] = max(dp[i + 1][j], dp[i][j - 1]);如果s[i]与s[j]相同,那么dp[i][j] = dp[i + 1][j - 1] + 2;dp[i][j]:字符串s在[i, j]范围内最长的回文子序列的长度为dp[i][j]。大多数要初始化为0,但是对于dp[i][i], 也就是下标相同的时候,是需要初始化为1的。给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。原创 2023-01-25 20:44:20 · 282 阅读 · 0 评论 -
leetcode 5 最长回文子串
如果是dp[i][j]为true,否则为false。(是一个true还是false的定义,由于题目是求最长回文串,所以这个dp肯定不能用来当最后的结果)二维布尔型dp数组的话,默认初始化是false,但要注意其实dp[i][i]这种的一定是true,可以在初始化的时候赋值好。这道题的定义方法之前遇到过:表示区间范围[i,j] (注意是左闭右闭)的子串。= s[j] 时,那什么都不用说了,肯定是false;如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。解释:“aba” 同样是符合题意的答案。原创 2023-06-18 22:19:35 · 708 阅读 · 1 评论 -
leetcode647 回文子串
对于大多数求子序列类的题目来说,求什么我们就定义什么,比如求回文子串的数目我们就定义成这个,但是对于这道题来说,dp[i] 和 dp[i-1] ,dp[i + 1] 看上去都没啥关系;因此这道题,要定义dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。4.遍历顺序,求dp[i][j]的时候,子串是dp[i+1][j-1],相当于二维数组中的左下角位置,因此二维数组的遍历是从下到上,从左到右。还是先分为两步,如果s[i]!原创 2023-01-25 19:29:22 · 1120 阅读 · 0 评论 -
leetcode72 编辑距离
dp[i][j] 表示以下标i-1为结尾的字符串word1,和以下标j-1为结尾的字符串word2,最近编辑距离为dp[i][j]。即dp[i][j] = dp[i-1][j] + 1。这种情况下dp[i][j] = dp[i - 1][j - 1];if (word1[i - 1] == word2[j - 1]) 时 dp[i][j] = dp[i - 1][j - 1]那么再加上这个替换的操作,就是 dp[i][j] = dp[i - 1][j - 1] + 1;1.确定dp数组及其含义。原创 2023-01-25 15:09:08 · 945 阅读 · 0 评论 -
leetcode583 两个字符串的删除操作
当word1[i - 1] 与 word2[j - 1]相同的时候,dp[i][j] = dp[i - 1][j - 1];为啥等于-1呢,就相当于,两个字符串这个位置的值是相同的,那么删了也是一样的;dp[i][0],根据dp数组的含义,表示word2是一个空字符串,那么以i-1结尾的word1,需要删除0-i-1共i个元素,才能成为空串;dp[i][j]表示,以i-1结尾的字符串word1和以j-1结尾的字符串word2,要想达到相等,需要删除元素的最少次数。do[0][j]同理。原创 2023-01-24 17:26:02 · 1305 阅读 · 0 评论 -
leetcode115 不同的子序列
字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,“ACE” 是 “ABCDE” 的一个子序列,而 “AEC” 不是)dp[i][j]:以i-1为结尾的s子序列中出现以j-1为结尾的t的个数为dp[i][j]给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。如下图所示, 有 3 种可以从 s 中得到 “rabbit” 的方案。输入:s = “rabbbit”, t = “rabbit”1.确定dp数组及其含义。原创 2023-01-24 15:16:14 · 1322 阅读 · 0 评论 -
leetcode392判断子序列
dp[i][j] 表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列的长度为dp[i][j](和前几道题的定义方式一样)if (s[i - 1] == t[j - 1]),那么dp[i][j] = dp[i - 1][j - 1] + 1;= t[j - 1]),那么由于s原创 2023-01-24 08:55:13 · 75 阅读 · 0 评论 -
leetcode53 最大子数组和 + 152 乘积最大子数组
给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。原创 2022-02-03 10:52:15 · 5230 阅读 · 0 评论 -
leetcode1143 最长公共子序列
如果text1[i - 1] 与 text2[j - 1]不相同,那就看看text1[0, i - 2]与text2[0, j - 1]的最长公共子序列 和 text1[0, i - 1]与text2[0, j - 2]的最长公共子序列,取最大的。需要一个二维数组dp[i][j],表示长度为[0,i-1]的字符串text1和长度为[0,j-1]的字符串text2,最长公共子序列为dp[i][j],至于为什么要算i-1,和上一道题一样,只是为了写代码的时候好处理。如果不存在 公共子序列 ,返回 0。原创 2023-01-23 20:24:41 · 830 阅读 · 1 评论 -
leetcode718 最长重复子数组
那么为什么这个dp数组的含义要定义成 -1 的形式呢,主要是为了后面的逻辑好理解,首先初始化的时候,只需要初始化dp[0][0]就可以了,不然的话就需要初始化第一行和第一列。dp[i][j]表示有两个数组nums1和nums2,以i-1为结尾的数组1和以j-1为结尾的数组2,最长重复子数组为dp[i][j];对于两个数组,如果nums1[i] == nums2[j],则有dp[i][j] = dp[i-1][j-1] + 1。解释:长度最长的公共子数组是 [3,2,1]。1.确定dp数组及其含义。原创 2023-01-11 09:03:26 · 324 阅读 · 0 评论 -
leetcode674 最长连续递增序列
连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l原创 2023-01-04 09:27:48 · 152 阅读 · 0 评论 -
leetcode300 最长递增子序列
当nums[i] > nums[j]的时候,此时的dp[i] = dp[j]+1;子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。位置i的最长递增子序列等于:从0到i-1各个位置的最长递增子序列+1(要求nums[i]>nums[j])dp[i]表示包括下标i(值为nums[i])的最长递增子序列的长度(和之前的题目定义的思路差不多)输入:nums = [10,9,2,5,3,7,101,18]原创 2023-01-04 08:49:37 · 321 阅读 · 0 评论 -
leetcode 714 买卖股票的最佳时机含手续费
如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。这道题看着好像很复杂的样子,其实和之前的基本一样,就是在每次卖出的时候多减一下手续费就行。注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。输入:prices = [1, 3, 2, 8, 4, 9], fee = 2。总利润: ((8 - 1) - 2) + ((9 - 4) - 2) = 8。也还是只有两种状态,0是持有买入的状态,1是持有卖出的状态。在此处卖出 prices[3] = 8。原创 2023-01-03 09:34:27 · 121 阅读 · 0 评论 -
leetcode 309 最佳买卖股票时机含冷冻期
所以这种情况的递推公式为:dp[i][0] = max(dp[i - 1][0], dp[i - 1][3] - prices[i], dp[i - 1][1] - prices[i]);所以此时递推公式为:dp[i][1] = max(dp[i - 1][1], dp[i - 1][3]);只有一种可能,昨天持有,今天卖出:dp[i][2] = dp[i - 1][0] + prices[i];操作一:前一天就已经买入了,今天继续保持,则dp[i][0] = dp[i-1][0]原创 2023-01-03 09:13:19 · 107 阅读 · 0 评论 -
leetcode 188 买卖股票的最佳时机IV
解释:在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2。以此类推,奇数时都是买入,偶数时都是卖出,因为要完成K笔交易,每笔交易都有买入和卖出,所以j的范围最大到:2*k+1。给定一个整数数组 prices ,它的第 i 个元素 prices[i] 是一支给定的股票在第 i 天的价格。dp[i][j] :第i天的状态为j,所剩下的最大现金是dp[i][j]输入:k = 2, prices = [2,4,1]原创 2023-01-03 07:58:43 · 203 阅读 · 0 评论 -
leetcode 123 买卖股票的最佳时机III
给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。输入:prices = [3,3,5,0,0,3,1,4]输出:6解释:在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3 。随后,在第 7 天(股票价格 = 1)的时候买入,在第 8 天 (股票价格 = 4)的时候卖出,这原创 2022-12-28 10:07:52 · 230 阅读 · 0 评论 -
leetcode122 买卖股票的最佳时机II
这道题还是只用贪心算法的话,要求整体的最大利润,相当于分解成各个小的利润的和,当天买入再卖出的价钱是一样的,当然没利润,要两天才会产生利润;此时两天的利润可能是正的也可能是负的,那么我们把可以加的正的都加起来就是最大利润。解释:在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。原创 2022-12-27 09:47:01 · 392 阅读 · 0 评论 -
leetcode 121 买卖股票的最佳时机
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。dp[i][1] 表示第i天不持有股票所得最多现金。dp[i][0] 表示第i天持有股票所得最多现金。输入:[7,1,5,3,6,4]原创 2022-12-27 09:26:58 · 419 阅读 · 0 评论 -
leetcode 337 打家劫舍III
一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。不偷:从左右孩子中偷一个最大的,即 val2 = max(left[0], left[1]) + max(right[0], right[1]);偷:则其左右孩子节点就不能偷了,即 val1 = cu.val + left[0] + right[0];返回 在不触动警报的情况下 ,小偷能够盗取的最高金额。本题要使用后序遍历,因为要拿到递归函数的返回值,来进行下一步的运算。注意:上面的0和1分别代表的是不偷和偷。原创 2022-12-22 10:14:37 · 732 阅读 · 0 评论 -
leetcode 213 打家劫舍II
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。0 - (n-2)考虑取第一个和倒数第二个。原创 2022-12-21 22:05:01 · 82 阅读 · 0 评论 -
leetcode 198 打家劫舍
dp[i]一定是由之前的数据推导出来的,对于i,如果决定要偷i,则dp[i] = dp[i-2] + nums[i],如果决定不偷i的话,那么dp[i] = dp[i-1],所以要取两者的最大值。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。dp[i]:表示到第i间房屋的时候,能偷盗的最大价值。原创 2022-12-21 21:12:29 · 97 阅读 · 0 评论 -
leetcode 139 单词拆分
在 j < i 的情况下,如果确定dp[j] 是true,且 [j, i] 这个区间的子串出现在字典里,那么dp[i]一定是true。请你判断是否可以利用字典中出现的单词拼接出 s。而对于本题来说,最后求的是能否构造出xxx,所以用哪种遍历都是可以的(但题解又说是相当于排列,要先背包)dp[0] = true,因为是根据它推出来的,不然后面的都成了false了。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。dp[i]:字符串长度为i的话,dp[i]表示是否可以拼出来给定字符串。原创 2022-12-19 11:53:01 · 322 阅读 · 0 评论 -
leetcode 279 完全平方数
完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。给你一个整数 n ,返回 和为 n 的完全平方数的最少数量。dp[j]:和为j的完全平方数的最少数量为dp[j]dp[0] = 0 即和为0的完全平方数最小数量是0。1.确定dp数组(dp table)以及下标的含义。和上一道题一样,其余值要初始化为最大值。解释:12 = 4 + 4 + 4。4.遍历顺序,先背包再物品。原创 2022-12-16 20:41:25 · 78 阅读 · 0 评论 -
leetcode 322 零钱兑换
凑足总额为j - coins[i]的最少个数为dp[j - coins[i]],那么只需要加上一个钱币coins[i],注意,这里是加一个硬币,数量是1 就可以了,即dp[j - coins[i]] + 1就是dp[j](考虑coins[i])除此之外,因为要求最小值,那么比较的时候,要先把整个数组初始化为最大值才行。输入:coins = [1, 2, 5], amount = 11。凑成总金额为0需要的最小硬币数量一定是0,所以dp[0] = 0。dp[j]:凑足总额为j所需钱币的最少个数为dp[j]原创 2022-12-16 19:30:34 · 373 阅读 · 0 评论 -
leetcode 70 爬楼梯
上一道题解刚刚说过,求装满背包有几种方法,递推公式一般都是dp[i] += dp[i - nums[j]];每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?所以本题的递推公式为:dp[i] += dp[i - j]dp[i]:爬到有i个台阶的楼顶,有dp[i]种方法。需要 n 阶你才能到达楼顶。这道题首先也可以用斐波那契那种方法解,不再赘述。dp[0] = 1,解释过多次,无可争议。解释:有三种方法可以爬到楼顶。1.确定dp数组以及下标的含义。求排列,先背包,再物品。原创 2022-12-16 17:54:18 · 425 阅读 · 0 评论 -
leetcode 377 组合总和IV
给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target。请你从 nums 中找出并返回总和为 target 的元素组合的个数。dp[i]: 凑成目标正整数为i的排列个数为dp[i];即i是背包容量,dp[i]是个数。根据示例,虽说写的是求组合,但其实是要求排列,且求的是排列的个数;输入:nums = [1,2,3], target = 4。题目数据保证答案符合 32 位整数范围。请注意,顺序不同的序列被视作不同的组合。1.确定dp数组以及下标的含义。原创 2022-12-16 17:16:39 · 509 阅读 · 0 评论 -
leetcode 518 零钱兑换II
给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。请你计算并返回可以凑成总金额的硬币组合数。输入:amount = 5, coins = [1, 2, 5]这道题根据题目描述,每种面额有无限多个,因此是一道完全背包问题;这道题和之前的目标和题目基本一样,只不过这个是每种硬币无限个。dp[0] = 1 和之前的题目一样,不然永远是0了。dp[j]:凑成总金额j的货币组合数为dp[j]1.确定dp数组以及下标的含义。原创 2022-12-16 10:22:39 · 213 阅读 · 0 评论 -
leetcode 474 一和零
其他满足题意但较小的子集包括 {“0001”,“1”} 和 {“10”,“1”,“0”}。解释:最多有 5 个 0 和 3 个 1 的最大子集是 {“10”,“0001”,“1”,“0”} ,因此答案是 4。输入:strs = [“10”, “0001”, “111001”, “1”, “0”], m = 5, n = 3。dp[i][j]:最多有i个0和j个1的strs的最大子集的大小为dp[i][j]。请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1。原创 2022-12-15 22:23:42 · 216 阅读 · 0 评论 -
leetcode1049 最后一块石头的重量II
因为重量都不会是负数,所以dp[j]都初始化为0就可以了,同时dp数组需要初始化为一个较大的空间,一般为target+1,而target=sum/2。= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。组合 2 和 4,得到 2,所以数组转化为 [2,7,1,8,1],组合 1 和 1,得到 0,所以数组转化为 [1],这就是最优值。组合 7 和 8,得到 1,所以数组转化为 [2,1,1,1],组合 2 和 1,得到 1,所以数组转化为 [1,1,1],原创 2022-12-13 21:23:00 · 97 阅读 · 0 评论 -
leetcode 494 目标和
即sum( P) - sum(N) == target(就是减号,因为N是负数)即sum( P) + sum(N) + ( sum( P) - sum(N) ) == sum( P) + sum(N) + target;例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1”。则问题转换为:存在多少个子集P,使sum( P) == (target + sum(nums))/2;dp[j] 表示:填满j(包括j)这么大容积的包,原创 2022-12-13 18:50:38 · 376 阅读 · 0 评论 -
leetcode 416 分割等和子集
给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。输入:nums = [1,5,11,5]输出:true解释:数组可以分割成 [1, 5, 5] 和 [11] 。首先这道题是用动态规划的背包问题思路解,虽然我并没有看出了为什么是一个01背包问题。。。理解下题意,是这个数组的和,可以分割成两个一毛一样的和就是可以的;复习下动态规划五部曲:1.确定dp数组以及下标的含义本题中每一个元素的数值即是重量,也是价值;dp[j]表示 背原创 2022-12-07 23:28:20 · 233 阅读 · 0 评论 -
leetcoded 96 不同的二叉搜索树
给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数输入:n = 3输出:51.确定dp数组(dp table)以及下标的含义dp[i] : 1到i为节点组成的二叉搜索树的个数为dp[i]。2.确定递推公式dp[i] += dp[j - 1] * dp[i - j]; ,j-1 为j为头结点左子树节点数量,i-j 为以j为头结点右子树节点数量;3.dp数组如何初始化dp[0] = 1,若初始化为0得到话,后面的乘机就都原创 2022-12-06 10:41:51 · 61 阅读 · 0 评论 -
leetcode 343 整数拆分
给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。返回 你可以获得的最大乘积 。输入: n = 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。题目倒是通俗易懂,就是不好想;1.确定dp数组(dp table)以及下标的含义dp[i]:分拆数字i,可以得到的最大乘积为dp[i]2.确定递推公式这里就不是很好想了,首先对于索引i,需要再开一个循环,从1 到 i-1,对于循环中找到dp[i]的最大值;这里有两原创 2022-12-05 23:39:03 · 208 阅读 · 0 评论 -
leetcode 63 不同路径II
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]输出:2解释:3x3 网格的正中间有一个障碍物。从左上角到右下角一共有 2 条不同的路径:这道题和上一道相比,就原创 2022-12-05 22:50:02 · 358 阅读 · 0 评论