不同路徑II(一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記為“Start” )。 機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記為“Finish”)。 現在考慮網格中有障礙物。那么從左上角到右下角將會有多少條不同的路徑?網格中的障礙物和空位置分別用 1 和 0 來表示。)


示例 1:

輸入:
[
  [0,0,0],
  [0,1,0],
  [0,0,0]
]
輸出: 2
解釋:
3x3 網格的正中間有一個障礙物。
從左上角到右下角一共有 2 條不同的路徑:
1. 向右 -> 向右 -> 向下 -> 向下
2. 向下 -> 向下 -> 向右 -> 向右

思路分析這個問題和上一篇路徑題的分析一樣,不同之處在於,加了障礙物。那么我們可以重新定義一個二維數組,用來返回路徑數,具體思路見代碼注釋。
public static int uniquePathsWithObstacles(int[][] arr) { int m = arr.length; int n = arr[0].length; //如果起始位置和終點位置為1,直接返回0
        if(arr[0][0] == 1 || arr[m-1][n-1] == 1) return 0; //如果m == 1,判斷第m-1行是不是有1,有1直接返回0,否則返回1
        if(m == 1) { for(int j = 1;j<n;j++) { if(arr[0][j] == 1) return 0; } return 1; } //如果n == 1,判斷第n-1列是不是有1,有1直接返回0,否則返回1
        if(n == 1) { for(int i = 1;i < m;i++) { if(arr[i][0] == 1) return 0; } return 1; } //定義和輸入數組arr一樣大小的數組,作為判斷
        int[][] array = new int[m][n]; for(int j = 1;j<n;j++) { //判斷arr[0][j]是否等於1,如果不等於1,那么array[0][j]等於0,如果等於1, //從j列開始到j<n,array[0][j]全部賦值為0
            if(arr[0][j] == 0) { array[0][j] = 1; }else { for(int k = j;k<n;k++) { array[0][k] = 0; } break; } } for(int i = 1;i<m;i++) { //判斷arr[i][0]是否等於1,如果不等於1,那么array[i][0]等於0,如果等於1, //從i行開始到i<m,array[i][0]全部賦值為0
            if(arr[i][0] == 0) { array[i][0] = 1; }else { for(int k = i;k<m;k++) { array[k][0] = 0; } break; } } for(int i = 1;i<m;i++) { for(int j = 1;j<n;j++) { //如果arr[i][j] == 1,array = 0,否則array[i][j] = array[i-1][j] + array[i][j - 1]
                if(arr[i][j] == 0) { array[i][j] = array[i-1][j] + array[i][j - 1]; } } } //返回數組array最后一個數
        return array[m-1][n-1]; }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 Leetcode練習(Python):數組類:第63題:一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記為“Start” )。 機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記為“Finish”)。 現在考慮網格中有障礙物。那么從左上角到右下角將會有多少條不同的路徑? 不同路徑(一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記為“Start” )。 機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記為“Finish”)。 問總共有多少條不同的路徑?) Leetcode練習(Python) :數組類:第62題:一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記為“Start” )。 機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記為“Finish”)。 問總共有多少條不同的路徑? 最短路徑(給定一個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。 說明:每次只能向下或者向右移動一步。) Leetcode練習(Python):數組類:第64題:給定一個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。 說明:每次只能向下或者向右移動一步。 矩陣從左上角向右下角走,每次只能向右或者向下移動,求經過最小的路徑 一個n*n 的方格,要從左上角走到右下角,一次只能往右或往下走一步,求算法得出所有走動的方法數。 ROS costmap_2d局部障礙物無法清除和機器人到點搖擺 動態規划解決機器人網格路徑問題! 從棋盤左上角到右下角共有多少種走法
 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM