자바 구현 LeetCode 63 여러 경로 II (b)

63. 상이한 경로 II

왼쪽 코너 MXN 그리드에 위치한 로봇 (아래 "시작"이라는 점 그림을 시작).

로봇은 오른쪽이나 아래로 한 단계를 이동할 수 있습니다. 로봇 ( "마침"이라는 다음 그림) 그리드의 오른쪽 하단 모서리에 도달하려고합니다.

이제 그리드 장애물을 고려하십시오. 가있을 것입니다 그래서 얼마나 많은 서로 다른 경로 위에서는 오른쪽 아래 왼쪽?

그림 삽입 설명 여기

빈 그리드 위치를 각각 1과 0이 표현하는 장애물.

설명 : n은 m의 값은하게는 100 이상이다.

예 1 :

입력 :
[
[0,0,0],
[0,1,0],
[0,0,0]
]
출력 : 2
설명 :
중간는 3 × 3 격자 장애를 가지고있다.
에서 상위 두 개의 서로 다른 경로의 총의 오른쪽 아래 왼쪽 :

  1. 마우스 오른쪽 -> 오른쪽 -> 아래 -> 아래로
  2. 아래로 -> 아래 -> 우측 -> 우측

출처 : 숙박 버튼 (LeetCode)
링크 : HTTPS : //leetcode-cn.com/problems/unique-paths-ii는
모든 네트워크에서 공제 저작권. 상업 무단 전재 소스를 표시하시기 바랍니다 승인 된 공식, 비상업적 재판에 문의하시기 바랍니다.

class Solution {
     public int uniquePathsWithObstacles(int[][] arr) {
        if (arr == null || arr.length <= 0) {
            return 0;
        }
        int rows = arr.length;
        int cols = arr[0].length;
        int[][] dp = new int[rows][cols];

        for (int i = 0; i < cols; i++) 
            if (arr[0][i] == 1) {
               dp[0][i] = 0;
               break;   // 遇到障碍后面的都无法到达直接返回就行 默认就是0
            }      
            else dp[0][i] = 1;
    
        for (int i = 0; i < rows; i++) 
            if (arr[i][0] == 1) {
                 dp[i][0] = 0;    
                 break;  // 遇到障碍后面的都无法到达直接返回就行 默认就是0
            }  
            else dp[i][0] = 1;                 
            
        for (int i = 1; i < rows; i++) {
            for (int j = 1; j < cols; j++) {
                if (arr[i][j] == 1)  dp[i][j] = 0; // 遇到障碍就是0
                else dp[i][j] = dp[i - 1][j] + dp[i][j - 1]; // dpdpdp
            }
        }    
        return dp[rows - 1][cols - 1];
    }
}
출시 1177 원저 · 원 찬양 10000 + · 전망 520 000 +

추천

출처blog.csdn.net/a1439775520/article/details/104340347