Unique Path 2

Updated:

unique-paths 1과 똑같은데 중간에 장애물이 생겼다.

DP를 적용하되, 중간에 장애물을 만나면 더이상 탐색을 진행하지 않고 돌아가면 된다.

dp[x][y] : (x,y)로 오는 경우의수라고 정의를 하자
dp[x][y] = dp[x+1][y] + dp[x][y+1]
단 장애물은 예외

by Java

class Solution {
    public int uniquePathsWithObstacles(int[][] board) {
        int n= board.length;
        int m = board[0].length;
        int[][] dp = new int[n][m];
        for(int i=0;i<n;i++) {
            for(int j=0;j<m;j++) {
                dp[i][j]=-1;
            }
        }
        
        return go(0,0,board,dp,n,m);
    }
    private int go(int x,int y,int[][] board, int[][] dp, int n,int m) {
        if(x>=n || y>=m || board[x][y]==1) return 0;
        if(x==n-1 && y==m-1) return 1;
        if(dp[x][y]!=-1) return dp[x][y];
        dp[x][y]=0;
        dp[x][y]+=go(x+1,y,board,dp,n,m)+go(x,y+1,board,dp,n,m);
        return dp[x][y];
    }
}

Leave a comment