萌新练习写代码的每日一练:最小路径和
题目:给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
示例 1:
输入:grid = [[1,3,1],[1,5,1],[4,2,1]]
输出:7
解释:因为路径 1→3→1→1→1 的总和最小。
示例 2:
输入:grid = [[1,2,3],[4,5,6]]
输出:12
提示:
m == grid.length
n == grid[i].length
1 <= m, n <= 200
0 <= grid[i][j] <= 100
思路:直接遍历这张表即可,为了方便理解我新建一张表res(实际代码中我是直接用grid操作的)
首先建立res空表,其中的res[i][j]指的是从[0][0]到[0][j]和[i][0]的和,i=0的时候只会往右走,j=0的时候只往下走,如下图所示
上图中已经计算好最右边和最下面的值,此时需要计算中间问号的值,他肯定是从[0][1]或者[1][0]走进来计算,因此要选一个小的,所以这一格的值为min(res[0][1], res[1][0])+grid[1][1]
也就是说除了第一行和第一列,其他的格子都可以用这个方法去求,这样到右下角的格子就可以求得结果,如下图所示
最后返回res[m-1][n-1]就是最后的那个值了(画图解决一切问题)
题目来自LeetCode第64题