代码如下
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, 0));for(int i = 0; i < m && obstacleGrid[i][0] == 0; i++){dp[i][0] = 1;}for(int j = 0; j < n && obstacleGrid[0][j] == 0; j++){dp[0][j] = 1;}for(int i = 1; i < m; i++){for(int j = 1; j < n; j++){if(obstacleGrid[i][j] == 1)continue;dp[i][j] = dp[i - 1][j] + dp[i][j - 1];}}return dp[m - 1][n - 1];}
};
这个题目其实也就是多加了一个条件,多了障碍物,不能走。这个时候要对初始化进行一定的判断。
我写这个题目的错误点:
(1)好长时间都没用vector这个二维数组了,我连遍历都忘了怎么遍历了。
重点写一下。
//这个是行的多少,也就是来测量二维数组有多少行
obstacleGrid.size();
//这个是列的多少,也就是来测量二维数组有多少列
obstacleGrid[0].size();遍历二维数组vector<vector <int> > arr(m, vector<int>(n, 0))for(int i = 0; i < arr.size(); i++)
{for(int j = 0; j < arr[i].size(); j++){}
}
这个即可,真的是糊涂!
(2)if里面的判断语句,我居然写成了dp[i][j] == 1,我感觉我的脑子真是有坑,不知道怎么想的,实际上现在想想,并不是dp[i][j] == 1,毕竟我们要求的是dp[i][j],所以肯定是得需要原先的数obs来判断障碍物