Unique Paths && Unique Paths II
程序员文章站
2022-06-04 17:15:01
...
1. Unique Paths
- 题目描述
-
思路分析
整个网络矩阵没有设置障碍物:- 先将矩阵第一行和第一列的每个位置path[i][j]=1;
- 从第二行第二列的格子开始,根据杨辉三角的公式可知:
path[i][j]=path[i-1][j]+path[i][j-1]; - 因此,从网络左上角到右下角的路径数量为path[m-1][n-1]。
代码实现
class Solution {
public:
int uniquePaths(int m, int n) {
if (m < 0 || n < 0)
return 0;
vector<vector<int> >path(m, vector<int>(n, 1));
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
path[i][j] = path[i-1][j] + path[i][j-1];
}
}
return path[m-1][n-1];
}
};
2. Unique Paths II
题目描述
-
思路分析
网络矩阵可能设置障碍物,参考Unique Path的做法进行如下修改:- 矩阵第一行和第一列:障碍物之前path[i][j]=1,当遇到某个障碍物之后的所有path[i][j]=0;
- 从矩阵第二行第二列开始,当遇到某个位置的障碍物时就将path[i][j]=0,否则就按照杨辉三角的公式:path[i][j]=path[i-1][j]+path[i][j-1];
- 同样的,从网络左上角到右下角的路径数量为path[m-1][n-1]。
代码实现
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
int m = obstacleGrid.size();
if (m == 0) return 0;
int n = obstacleGrid[0].size();
if (n == 0) return 0;
vector<vector<int> >path(m, vector<int>(n, 0));
path[0][0] = obstacleGrid[0][0] ? 0 : 1;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (i >= 1 && j >= 1) {
if (obstacleGrid[i][j] == 1) {
path[i][j] = 0;
} else{
path[i][j] = path[i-1][j] + path[i][j-1];
}
} else if (j >= 1) {
if (obstacleGrid[i][j] == 0) {
path[i][j] = path[i][j-1];
} else {
path[i][j] = 0;
}
} else if (i >= 1) {
if (obstacleGrid[i][j] == 0) {
path[i][j] = path[i-1][j];
} else {
path[i][j] = 0;
}
}
}
}
return path[m-1][n-1];
}
};
上一篇: 算法与数据结构(3)—— 归并排序
下一篇: 排序算法(4)--归并排序
推荐阅读
-
LintCode 114. Unique Paths
-
63. Unique Paths II 动态规划
-
63. Unique Paths II 动态规划
-
【leetcode】Unique Paths II(动态规划)
-
LeetCode 63. Unique Paths II(动态规划)
-
[LeetCode] Unique Paths && Unique Paths II && Minimum Path Sum (动态规划之 Matrix DP )
-
动态规划----unique paths
-
【LeetCode62 Unique Paths】动态规划计算路径
-
【动态规划】LeetCode 63. Unique Paths II
-
牛客网_leetcode_unique-paths-ii(动态规划)