题目大意:与62题类似,只是这个题中间有障碍。
法一:dfs,依旧超时。代码如下:
1 public int uniquePathsWithObstacles(int[][] obstacleGrid) { 2 boolean vis[][] = new boolean[obstacleGrid.length][obstacleGrid[0].length]; 3 int f[][] = {{1, 0}, {0, 1}}; 4 //如果起始格子就是障碍,则表示不能正常到达目的地 5 if(obstacleGrid[0][0] == 1) { 6 return 0; 7 } 8 return dfs(obstacleGrid, 0, 0, 0, f, vis); 9 } 10 public static int dfs(int[][] obstacleGrid, int x, int y, int cnt, int f[][], boolean vis[][]) { 11 if(x == obstacleGrid.length - 1 && y == obstacleGrid[0].length - 1 && obstacleGrid[x][y] == 0) { 12 cnt++; 13 return cnt; 14 } 15 for(int i = 0; i < 2; i++) { 16 int cnt_x = x + f[i][0]; 17 int cnt_y = y + f[i][1]; 18 if(cnt_x < obstacleGrid.length && cnt_y < obstacleGrid[0].length && vis[cnt_x][cnt_y] == false && obstacleGrid[cnt_x][cnt_y] == 0) { 19 vis[cnt_x][cnt_y] = true; 20 cnt = dfs(obstacleGrid, cnt_x, cnt_y, cnt, f, vis); 21 vis[cnt_x][cnt_y] = false; 22 } 23 } 24 return cnt; 25 }