https://leetcode.cn/problems/unique-paths/
算法思想:
dp[i][j]含义走到i,j有多少种不同的路径
dp[i][j] = dp[i-1][j] + dp[i][j-1] 走到上方的格的不同路径和+走到左边方格不同的路径和
初始化:上方和左方的格初始化为1.
class Solution {
public:
int uniquePaths(int m, int n) {
vector<vector<int>> dp(m, vector<int> (n,1));
//dp[i][j]表示走到i、j有dp[i][j]条路径
for(int i=1;i<m;i++)
{
for(int j = 1;j<n;j++)
{
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
return dp[m-1][n-1];
}
};
https://leetcode.cn/problems/unique-paths-ii/submissions/
算法思想:
动态规划。与上一题不同的是,多了障碍物,此时障碍物的格子路径为0。
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
int m =obstacleGrid.size();
int n = obstacleGrid[0].size();
vector<vector<int>> dp(m, vector<int> (n));
int val = 1;
for(int j=0;j<n;j++)
{
if(obstacleGrid[0][j]==1)
val = 0;
dp[0][j] = val;
}
val = 1;
for(int i=0;i<m;i++)
{
if(obstacleGrid[i][0]==1)
{
val=0;
}
dp[i][0] = val;
}
for(int i=1;i<m;i++)
{
for(int j=1;j<n;j++)
{
if(obstacleGrid[i][j]==1)
dp[i][j] = 0;
else
{
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
}
return dp[m-1][n-1];
}
};