解题思路:
和Unique Path差不多
提交代码:
class Solution {
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
int m=obstacleGrid.length;int n=obstacleGrid[0].length;
int[][] dp=new int[m][n];
// initialize the bottom row
for(int i=n-1;i>=0;i--) {
if(obstacleGrid[m-1][i]==1) {
for(int j=i;j>=0;j--)
dp[m-1][j]=-1;
break;
}
dp[m-1][i]=1;
}
// initialize the right column
for(int i=m-1;i>=0;i--) {
if(obstacleGrid[i][n-1]==1) {
for(int j=i;j>=0;j--)
dp[j][n-1]=-1;
break;
}
dp[i][n-1]=1;
}
for(int i=m-2;i>=0;i--) {
for(int j=n-2;j>=0;j--) {
if(obstacleGrid[i][j]==1) {
dp[i][j]=-1;
continue;
}
dp[i][j]=0;
if(dp[i+1][j]!=-1) dp[i][j]+=dp[i+1][j];
if(dp[i][j+1]!=-1) dp[i][j]+=dp[i][j+1];
}
}
return dp[0][0]>0?dp[0][0]:0;
}
}
运行结果:

本文详细解析了在存在障碍的情况下寻找从起点到终点的唯一路径数量的算法。通过动态规划的方法,初始化边界条件并逐步计算可达路径数,最终得出解决方案。代码实现清晰,适合算法学习者深入理解。
1116

被折叠的 条评论
为什么被折叠?



