Leetcode的动态规划类习题,通过率为32%。链接:https://leetcode.com/problems/unique-paths-ii/description/
题目要求我们求从m*n格子左上角到右下角的不同路径数。自然而然想到用动态规划求解方法。
由题目分析可知, 状态转移方程为:dp[i][j](表示到第i行第j列的位置的路径数量)=dp[i-1][j]+dp[i][j-1]。
所以实现代码如下
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
vector<int> temp(obstacleGrid[0].size(), 0);
vector<vector<int> > dp(obstacleGrid.size(), temp);
for(int i = 0; i < obstacleGrid.size(); i++) {
for(int j = 0; j < obstacleGrid[0].size(); j++) {
if (obstacleGrid[i][j] == 1) {
dp[i][j] == 0;
}
else {
if (i==0 && j==0) {
dp[i][j] = 1;
}
if (i==0 && j!=0 ) {
dp[i][j] = dp[i][j-1];
}
if (i!=0 && j==0) {
dp[i][j] = dp[i-1][j];
}
if (i!=0 && j!=0) {
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
}
}
return dp.back().back();
}
};