tests/java/src/dynamicProgramming/uniquePaths/uniquePathsII.java
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        if (obstacleGrid.length == 0 || obstacleGrid[0].length ==0) {
            return 0;
        }
        if (obstacleGrid[0][0] == 1) {
            return 0;
        }
        int m = obstacleGrid.length;
        int n = obstacleGrid[0].length;
        // write your code here
        int[][] matrix = new int[m][n];
        for (int i = 0; i < m; i++) {
            if (obstacleGrid[i][0] != 1) {
                matrix[i][0] = 1;
            } else {
                break;
            }
        }
        for (int i = 0; i < n; i++) {
            if (obstacleGrid[0][i] != 1) {
                matrix[0][i] = 1;
            } else {
                break;
            }
        }

        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                if (obstacleGrid[i][j] == 1) {
                    matrix[i][j] = 0;
                } else {
                    matrix[i][j] = matrix[i-1][j] + matrix[i][j-1];
                }
            }
        }
        return matrix[m-1][n-1];
    }
/**
     * @param obstacleGrid: A list of lists of integers
     * @return: An integer
     */
@param obstacleGrid: A list of lists of integers
@return: An integer
@param obstacleGrid : A list of lists of integers @return : An integer
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        if (obstacleGrid.length == 0 || obstacleGrid[0].length ==0) {
            return 0;
        }
        if (obstacleGrid[0][0] == 1) {
            return 0;
        }
        int m = obstacleGrid.length;
        int n = obstacleGrid[0].length;
        int[][] matrix = new int[m][n];
        for (int i = 0; i < m; i++) {
            if (obstacleGrid[i][0] != 1) {
                matrix[i][0] = 1;
            } else {
                break;
            }
        }
        for (int i = 0; i < n; i++) {
            if (obstacleGrid[0][i] != 1) {
                matrix[0][i] = 1;
            } else {
                break;
            }
        }
        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                if (obstacleGrid[i][j] == 1) {
                    matrix[i][j] = 0;
                } else {
                    matrix[i][j] = matrix[i-1][j] + matrix[i][j-1];
                }
            }
        }
        return matrix[m-1][n-1];
    }
public int uniquePathsWithObstacles ( int [ ] [ ] obstacleGrid ) { if ( obstacleGrid . length == 0 || obstacleGrid [ 0 ] . length == 0 ) { return 0 ; } if ( obstacleGrid [ 0 ] [ 0 ] == 1 ) { return 0 ; } int m = obstacleGrid . length ; int n = obstacleGrid [ 0 ] . length ; int [ ] [ ] matrix = new int [ m ] [ n ] ; for ( int i = 0 ; i < m ; i ++ ) { if ( obstacleGrid [ i ] [ 0 ] != 1 ) { matrix [ i ] [ 0 ] = 1 ; } else { break ; } } for ( int i = 0 ; i < n ; i ++ ) { if ( obstacleGrid [ 0 ] [ i ] != 1 ) { matrix [ 0 ] [ i ] = 1 ; } else { break ; } } for ( int i = 1 ; i < m ; i ++ ) { for ( int j = 1 ; j < n ; j ++ ) { if ( obstacleGrid [ i ] [ j ] == 1 ) { matrix [ i ] [ j ] = 0 ; } else { matrix [ i ] [ j ] = matrix [ i - 1 ] [ j ] + matrix [ i ] [ j - 1 ] ; } } } return matrix [ m - 1 ] [ n - 1 ] ; }
@param obstacleGrid: A list of lists of integers
 @return: An integer
@param obstacleGrid : A list of lists of integers @return : An integer
// write your code here