【每日一题】给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。
发布日期:2021-10-06 02:38:42 浏览次数:5 分类:技术文章

本文共 1067 字,大约阅读时间需要 3 分钟。

给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:每次只能向下或者向右移动一步。

示例:

输入:

[
  [1,3,1],
  [1,5,1],
  [4,2,1]
]
输出: 7
解释: 因为路径 1→3→1→1→1 的总和最小。

class Solution {    public int minPathSum(int[][] grid) {        int[][] dp= new int[grid.length][grid[0].length];        for(int i =0; i< grid.length; i++){            int temp = i==0?0:dp[i-1][0];            dp[i][0] = grid[i][0] + temp;        }                for(int j=0; j< grid[0].length; j++){            int temp = j==0?0:dp[0][j-1];            dp[0][j] = grid[0][j] + temp;        }        for(int i= 1; i< grid.length; i++){            for(int j= 1; j< grid[0].length; j++){                int iTemp = grid[i][j] + dp[i-1][j];                int jTemp = grid[i][j] + dp[i][j-1];                dp[i][j] = iTemp > jTemp ? jTemp:iTemp;            }        }        return dp[grid.length-1][grid[0].length-1];    }}

时间复杂度:O(mn)O(mn),其中 mm 和 nn 分别是网格的行数和列数。需要对整个网格遍历一次,计算 \textit{dp}dp 的每个元素的值。

空间复杂度:O(mn)O(mn),其中 mm 和 nn 分别是网格的行数和列数。创建一个二维数组 dpdp,和网格大小相同。

空间复杂度可以优化,例如每次只存储上一行的 \textit{dp}dp 值,则可以将空间复杂度优化到 O(n)O(n)。

转载地址:https://blog.csdn.net/luxuiary/article/details/107531897 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【每日一题】爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。 最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作: 选出任一 x,满足 0 < x < N 且 N % x
下一篇:给你一个数组 arr ,请你将每个元素用它右边最大的元素替换,如果是最后一个元素,用 -1 替换。 完成所有替换操作后,请你返回这个数组。

发表评论

最新留言

不错!
[***.144.177.141]2024年04月02日 13时57分39秒