题目为 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
这题和之前的地下城游戏思路差不多,但是比之前那个简单,我是从终点向起点遍历,选取最小路径值,代码和注释如下
public int MinPathSum(int[][] grid)
{
if (grid==null)
{
return 0;
}
int y = grid.Length - 1;
int x = grid[0].Length - 1;
//我这里用了一个数组存储 因为我是从下向上 右侧向左 所以这么存储不占用空间 左侧数值 可以从右侧获取
int[] resMin = new int[grid[0].Length];
for (int i = y; i >= 0; i--)
{
for (int j = x; j >= 0; j--)
{
//右下角起点 直接赋值
if (i == y && j == x)
{
resMin[j] = grid[i][j];
}
//最下方的一层 只能从右侧到达
else if (i == y)
{
resMin[j] = grid[i][j] + resMin[j + 1];
}
//最右侧的一列 只能从下方到达
else if (j == x)
{
resMin[j] = grid[i][j] + resMin[j];
}
else
{
//选择右侧或者下方最下的一个路径
resMin[j] = grid[i][j] + Math.Min(resMin[j], resMin[j + 1]);
}
}
}
return resMin[0];
}