题目大意
62题给出表格的大小,m是行数,n是列数,求从左上角到右下角可达路径的数量;63题在62题的基础上加上了obstacle的限制,需要处理的情况增加不少,需要注意。
62题原题
63题原题
代码
62题
class Solution {
public:
int uniquePaths(int m, int n) {
const int rowSize = m;
const int colSize = n;
int statusTable[rowSize][colSize];
if (m <= 1 || n <= 1) {
return 1;
}
for (int i = 0; i < rowSize; i++) {
for (int j = 0; j < colSize; j++) {
if (i == 0 || j == 0) {
statusTable[i][j] = 1;
} else {
statusTable[i][j] = statusTable[i - 1][j] + statusTable[i][j - 1];
}
}
}
return statusTable[rowSize - 1][colSize - 1];
}
};
63题
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
if (obstacleGrid.size() < 1 || obstacleGrid[0].size() < 1) {
return 1;
}
for (int i = 0; i < obstacleGrid.size(); i++) {
for (int j = 0; j < obstacleGrid[i].size(); j++) {
if (obstacleGrid[i][j] == 1) {
obstacleGrid[i][j] = 0;
} else if (i == 0 && j == 0) {
obstacleGrid[i][j] = 1;
}else if (i == 0) {
obstacleGrid[i][j] = obstacleGrid[i][j - 1];
} else if (j == 0) {
obstacleGrid[i][j] = obstacleGrid[i - 1][j];
}
else {
obstacleGrid[i][j] = obstacleGrid[i - 1][j] + obstacleGrid[i][j - 1];
}
}
}
return obstacleGrid[obstacleGrid.size() - 1][obstacleGrid[0].size() - 1];
}
};