leetcode 63. Unique Paths II - 고유 경로 | 동적 계획

1742 단어 LeetCode
텍스트 링크: Unique Paths II
[사고방식]
leetcode 62.Unique Paths-고유 경로 | 동적 계획 차이점
여기에 로봇에게 장애물을 증가시켰습니다. 점차적인res[i][j]=res[i-1][j]+res[i][j-1] 이전에 판단을 추가해야 합니다. 만약에res[i][j]=0,res[i][j]=0:
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        int[][] pathCount = new int[obstacleGrid.length][obstacleGrid[0].length];
        for (int i = 0; i < obstacleGrid.length && obstacleGrid[i][0] != 1; i++)
            pathCount[i][0] = 1;
        for (int j = 0; j < obstacleGrid[0].length && obstacleGrid[0][j] != 1; j++)
            pathCount[0][j] = 1;
        for (int i = 1; i < obstacleGrid.length; i++)
            for (int j = 1; j < obstacleGrid[0].length; j++)
                if (obstacleGrid[i][j] == 1) pathCount[i][j] = 0;
                else pathCount[i][j] = pathCount[i - 1][j] + pathCount[i][j - 1];
        return pathCount[obstacleGrid.length - 1][obstacleGrid[0].length - 1];
    }

43/43
 test cases passed. Runtime: 1 ms  Your runtime beats 17.74% of javasubmissions.
【최적화】
여기서도 마찬가지로 2차원 그룹을 1차원 그룹으로 최적화할 수 있다.pathCount[i]는 행렬m을 저장합니다.× n 행렬, m행 i열의 주법 수:
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        int[] pathCount = new int[obstacleGrid[0].length];
        pathCount[0] = 1;
        for (int i = 0; i < obstacleGrid.length; i++)
            for (int j = 0; j < obstacleGrid[0].length; j++)
                if (obstacleGrid[i][j] == 1) pathCount[j] = 0;
                else if (j > 0) pathCount[j] += pathCount[j - 1];
        return pathCount[obstacleGrid[0].length - 1];
    }

43/43 test cases passed. Runtime: 1 ms  Your runtime beats 17.74% of javasubmissions.

좋은 웹페이지 즐겨찾기