题目描述:
经典必刷编程题库——求路径(机器人到达地图终点求路径总数)
一个机器人在m×n大小的地图的左上角(起点)。 机器人每次向下或向右移动。机器人要到达地图的右下角(终点)。
可以有多少种不同的路径从起点走到终点?
(备注:m和n小于等于100,并保证计算结果在int范围内)
class Solution
{
public:
int uniquePaths(int m, int n)
{
int ans[m][n];
for(int i = 0; i < m; i++)
{
for(int j = 0; j < n; j++)
{
if(i == 0 || j == 0)
ans[i][j] = 1;
else
{
ans[i][j] = ans[i-1][j] + ans[i][j-1];
}
}
}
return ans[m-1][n-1];
}
};
题目描述:
经典必刷编程题库——求路径II(加入障碍求路径总数)
继续求路径。
如果在图中加入了一些障碍,有多少不同的路径?
分别用0和1代表空区域和障碍。
class Solution
{
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid)
{
if(obstacleGrid.size() == 0 || obstacleGrid[0][0] == 1)
return 0;
int row = obstacleGrid.size();
int col = obstacleGrid[0].size();
vector<vector<int>> ans(row, vector<int>(col, 0));
for(int i = 0; i < row; i++)
{
if(obstacleGrid[i][0] == 0)
ans[i][0] = 1;
else
break;
}
for(int j = 0; j < col; j++)
{
if(obstacleGrid[0][j] == 0)
ans[0][j] = 1;
else
break;
}
for(int i = 1; i < row; i++)
{
for(int j = 1; j < col; j++)
{
if(obstacleGrid[i][j] == 0)
ans[i][j] = ans[i - 1][j] + ans[i][j - 1];
}
}
return ans[row - 1][col - 1];
}
};
版权声明:本文为m0_46613023原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。