矩阵路径 LeetCode62 && LeetCode63 && LeetCode64

1. 矩阵的最小路径和 LeetCode 64. Minimum Path Sum (Medium)

问题描述

Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.
Note: You can only move either down or right at any point in time.
Example:
Input:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
Output: 7
Explanation: Because the path 1→3→1→1→1 minimizes the sum.

java实现

/*
sum[i][j]=
grid[i][j] i0 && j0 //左上角 没有移动 最小值为网格中的值
grid[i][j]+sum[i][j-1] i0 //在最上面一行,上一步为左一个,向右一步到达,最小值为到达左一个的最小值+网格中的值
grid[i][j]+sum[i-1][j] j
0 //在最左边一行,上一步为由上一个,向下一步到达,最小值为到达上一个的最小值+网格中的值
Math.min(sum[i][j-1],sum[i-1][j])+grid[i][j] //上一步有两种可能,sum[i][j-1]左一个(向右一步可以到达)和sum[i-1][j]上一个(向下一步可以到达),这两种方式的最小值+网格中的值为最小值。

*/
class Solution {
public int minPathSum(int[][] grid) {
int row = grid.length;
int col = grid[0].length;
if (row == 0 || col == 0)
return 0;
int[][] sum = new int[row][col];
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (i == 0 && j == 0)
sum[i][j] = grid[i][j];
else if (i == 0)
sum[i][j] = grid[i][j] + sum[i][j - 1];
else if (j == 0)
sum[i][j] = grid[i][j] + sum[i - 1][j];
else
sum[i][j] = Math.min(sum[i][j - 1], sum[i - 1][j]) + grid[i][j];
}
}
return sum[row - 1][col - 1];
}
}

2. 矩阵的总路径数(无障碍) LeetCode62. Unique Paths (Medium)

问题

只能往下或者往右走,共多少中走法
A robot is located at the top-left corner of a m x n grid (marked ‘Start’ in the diagram below).

The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked ‘Finish’ in the diagram below).

How many possible unique paths are there?

Example 1:

Input: m = 3, n = 2
Output: 3
Explanation:
From the top-left corner, there are a total of 3 ways to reach the bottom-right corner:

  1. Right -> Right -> Down
  2. Right -> Down -> Right
  3. Down -> Right -> Right
    Example 2:

Input: m = 7, n = 3
Output: 28

java实现

public class Solution {
public int uniquePaths(int m, int n) {
int[][] grid = new int[m][n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (i == 0 || j == 0)
grid[i][j] = 1;//j=0在最上面一行,只能向右一直向走到达 i=0在最左边,只能向下一直走到达
else
grid[i][j] = grid[i][j - 1] + grid[i - 1][j];
//grid[i][j-1]上一个(向下一步可以到达) grid[i-1][j]左一个(向右一步可以到达)
}
}
return grid[m - 1][n - 1];
}
}

3. 矩阵的总路径数(有障碍) LeetCode 63 Unique Paths II(Medium)

问题描述

A robot is located at the top-left corner of a m x n grid (marked ‘Start’ in the diagram below).
The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked ‘Finish’ in the diagram below).
Now consider if some obstacles are added to the grids. How many unique paths would there be?
An obstacle and empty space is marked as 1 and 0 respectively in the grid.
Note: m and n will be at most 100.
Example 1:
Input:
[
[0,0,0],
[0,1,0],
[0,0,0]
]
Output: 2
Explanation:
There is one obstacle in the middle of the 3x3 grid above.
There are two ways to reach the bottom-right corner:

  1. Right -> Right -> Down -> Down
  2. Down -> Down -> Right -> Right

java实现

class Solution {
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
int m = obstacleGrid.length;
int n = obstacleGrid[0].length;
int[][] grid = new int[m][n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (obstacleGrid[i][j] == 1)//不能到达,直接设置为0
grid[i][j] = 0;
else {
//可以到达 分情况
if (i == 0 && j == 0)
grid[i][j] = 1;
else if (i == 0)//i=0在最上面一行,由左一个向右一步到达
grid[i][j] = grid[i][j - 1];
else if (j == 0) //j=0在最左边,由上一个向下一步到达
grid[i][j] = grid[i - 1][j];
else
grid[i][j] = grid[i][j - 1] + grid[i - 1][j];
//grid[i][j-1]左一个(向右一步可以到达) grid[i-1][j]上一个(向下一步可以到达)
}
}
}
return grid[m - 1][n - 1];
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值