描述:
唯一路径:意思就是从[0,0]到[n,m](最右下角的方格)的路径
在矩阵中,0表示可通行,1表示有阻碍。求有多少条唯一路径。
具体分析:
运用动态规划,result[i][j]=result[i-1][j]+result[i][j-1];
- 其中result[i][j]表示的是到达[i,j]的方格时,有多少条唯一路径;
- 所以result[i][j]=result[i-1][j]+result[i][j-1],到达[i,j]的方格时的路径= 到达[i-1,j]的方格时的路径+到达[i,j-1]的方格时的路径;
- 注意:如果obstacleGrid[i][j]==1,那么到达[i,j]的方格时的路径是0
java代码:
class Solution {
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
int n =obstacleGrid.length;
int m=obstacleGrid[0].length;
int[][] result=new int[n][m];
if(obstacleGrid[0][0]==1 || obstacleGrid[n-1][m-1]==1)
return 0;
result[0][0]=1;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(i==0&&j==0)
continue;
result[i][j]=count(result,obstacleGrid,i-1,j)+count(result,obstacleGrid,i,j-1);
}
}
return result[n-1][m-1];
}
public int count(int[][] result,int[][] obstacleGrid,int n,int m){
if(n<0||m<0)
return 0;
if(obstacleGrid[n][m]==1)
return 0;
return result[n][m];
}
}