62. Unique Paths & 63. Unique Paths II(唯一路径1&2)
62. Unique Paths
题目链接
https://leetcode.com/problems/unique-paths/description/
题目描述
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?
Above is a 3 x 7 grid. How many possible unique paths are there?
Note: m and n will be at most 100.
题目分析
由于题目规定只能向下或向右移动,那么对于任意方格grid[i][j]
我们可以直接得到状态转移方程:
grid[i][j] = grid[i - 1][j] + grid[i][j - 1]
为了提高效率,我们可以使用递推的方法。通过进一步的考虑,事实上并不需要二维数组保存每个方格的路径数量,使用一维数组可以进一步降低空间复杂度。
方法:动态规划
算法描述
初始化长度为n
的数组,每个元素值为1
循环m
次,在每一次循环中:
从下标为1
的元素开始遍历,对于每一个元素:
steps[j] += steps[j - 1]
参考代码
class Solution {
public:
int uniquePaths(int m, int n) {
vector<int> steps(n, 1);
for (int i = 1; i < m; i++)
for (int j = 1; j < n; j++)
steps[j] += steps[j - 1];
return steps[n - 1];
}
};
63. Unique Paths II
题目链接
https://leetcode.com/problems/unique-paths-ii/description/
题目描述
Follow up for “Unique Paths”:
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
and0
respectively in the grid.For example,
There is one obstacle in the middle of a 3x3 grid as illustrated below.
[
[0,0,0],
[0,1,0],
[0,0,0]
]The total number of unique paths is
2
.Note: m and n will be at most 100.
题目分析
这道题目和上一道基本类似,唯一不同的是对障碍的处理,当地图上某点为障碍时,这一点的路径为0
方法:动态规划
算法描述
算法与上题相同,在遍历时考虑地图上此点是否为障碍,若为障碍,路径为0
参考代码
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
int m = obstacleGrid.size(), n = obstacleGrid[0].size();
vector<int> steps(n, 0);
steps[0] = 1;
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++) {
if (obstacleGrid[i][j])
steps[j] = 0;
else if (j)
steps[j] += steps[j - 1];
}
return steps[n - 1];
}
};