2014年5月11日星期日

Backtracking Solution - Unique Paths II

Similar to the first version, with one more flag check. Remember to initialize the process matrix bottom right to be 1.

public class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        if(obstacleGrid == null || obstacleGrid.length == 0){
            return 0;
        }
       
        int m = obstacleGrid.length;
        int n = obstacleGrid[0].length;
       
        if(obstacleGrid[0][0] == 1 || obstacleGrid[m - 1][n - 1] == 1){
            return 0;
        }
       
        int[][] process = new int[m][n];
        process[m - 1][n - 1] = 1;
     
        for(int mi = m - 1; mi >= 0; mi--){
            for(int nj = n - 1; nj >= 0; nj--){
                if(obstacleGrid[mi][nj] == 1){
                    process[mi][nj] = 0;
                    continue;
                }
                if(mi + 1 < m && nj + 1 < n){
                    process[mi][nj] = process[mi + 1][nj] + process[mi][nj + 1];
                    continue;
                }
                if(mi + 1 < m && obstacleGrid[mi + 1][nj] != 1){
                    process[mi][nj] = process[mi + 1][nj];
                    continue;
                }
                if(nj + 1 < n && obstacleGrid[mi][nj + 1] != 1){
                    process[mi][nj] = process[mi][nj + 1];
                }
            }
        }
        return process[0][0];
    }
}

没有评论: