此题和leetcode 62题状态转移方程是一样的,但是迁入了障碍物的概念,如果需要知道状态转移方程的思路,可以参考https://blog.csdn.net/qq_41936805/article/details/100179828
解出此题,我们必须知道对于障碍物的特点如下:
- 障碍处的dp值=0
我们已经知道了,动态转移方程为
dp[i][j]=dp[i][j-1]+dp[i-1][j]
接下来就要加入限制条件,如果检测到障碍,就把障碍坐标的dp初始化为0,如果起点dp[0][0]那么dp[1][1]=1,按照思路,加上限制条件就可以了。
然后将下面四种情况考虑一下:
- [[0]]
- [[1]]
- 多行单列有石头
- 单行多列有石头
记录一下碰见的坑,第二次for循环的限制条件不能是j<n了,因为不是每个obstacleGrid[].length是不相同的。
classSolution{publicintuniquePathsWithObstacles(int[][]obstacleGrid){intm=obstacleGrid.length;intn=obstacleGrid[0].length;int[][]dp=newint[m][n];for(inti=0;i<m;i++){for(intj=0;j<obstacleGrid[i].length;j++){if(obstacleGrid[i][j]==1){dp[i][j]=0;continue;}if(i==0&&j==0){dp[i][j]=1;continue;}if(i==0||j==0){dp[i][j]=i==0?dp[i][j-1]:dp[i-1][j];continue;}dp[i][j]=dp[i-1][j]+dp[i][j-1];}}returndp[m-1][n-1];}}