LeetCode 63. Unique Paths II Java
阿新 • • 發佈:2017-05-28
false mos tac empty uniq pub ons str ide
題目:
Follow up for "Unique Paths":
Now consider if some obstacles are added to the grids. How many unique paths would there be?
An obstacle and empty space is marked as 1
and 0
respectively in the grid.
For example,
There is one obstacle in the middle of a 3x3 grid as illustrated below.
[ [0,0,0], [0,1,0], [0,0,0] ]
The total number of unique paths is 2
.
Note: m and n will be at most 100.
題意:給出一個二維格子,其中值為1的點表示障礙點,要求求出從最左上角的點到最右下角的點有多少種走法。使用動態規劃,對於其中一個點obstacleGrid[i][j](1<i<m,i<j<n),到該點的走法為d(obstacleGrid[i][j])=d(obstacleGrid[i-1][j])+d(obstacleGrid[i][j-1]),對於第一行和第一列,如果該點前面有障礙點,那麽到到此點有0中方法,反之為1。遍歷數組即可求解。
代碼:
public class Solution { public int uniquePathsWithObstacles(int[][] obstacleGrid) { int m=obstacleGrid.length; //行 int n=0; //列 if(m!=0) n=obstacleGrid[0].length; int[][] A=new int[m][n]; //用戶記錄起點到當前點走法 for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ if(obstacleGrid[i][j]==1) //如果一個點障礙點,則到該點的只有0中方法 A[i][j]=0; else{ if(i==0||j==0){ //如果是第一列或者第一行 ,若該點前面有障礙點,那麽改點也是不可以達到的 boolean obstracle=false; if(i==0){ for(int k=0;k<j;k++){ if(obstacleGrid[i][k]==1) obstracle=true; } } else if(j==0){ for(int k=0;k<i;k++){ if(obstacleGrid[k][j]==1) obstracle=true; } } if(obstracle) A[i][j]=0; else A[i][j]=1; }else A[i][j]=A[i-1][j]+A[i][j-1]; } } } return A[m-1][n-1]; } }
LeetCode 63. Unique Paths II Java