程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Unique Paths II -- LeetCode

Unique Paths II -- LeetCode

編輯:C++入門知識

 
這道題跟Unique Paths非常類似,只是這道題給機器人加了障礙,不是每次都有兩個選擇(向右,向下)了。因為有了這個條件,所以Unique Paths中最後一個直接求組合的方法就不適用了,這裡最好的解法就是用動態規劃了。遞推式還是跟Unique Paths一樣,只是每次我們要判斷一下是不是障礙,如果是,則res[i][j]=0,否則還是res[i][j]=res[i-1][j]+res[i][j-1]。實現中還是只需要一個一維數組,因為更新的時候所需要的信息足夠了。這樣空間復雜度是是O(n)(如同Unique Paths中分析的,如果要更加嚴謹,我們可以去行和列中小的那個,然後把小的放在內層循環,空間復雜度就是O(min(m,n)),時間復雜度還是O(m*n)。代碼如下:

public int uniquePathsWithObstacles(int[][] obstacleGrid) {
    if(obstacleGrid == null || obstacleGrid.length==0 || obstacleGrid[0].length==0)
        return 0;
    int[] res = new int[obstacleGrid[0].length];
    res[0] = 1;
    for(int i=0;i0)
                    res[j] += res[j-1];
            }
        }
    }
    return res[obstacleGrid[0].length-1];
}
這裡就不列出brute force遞歸方法的代碼了,遞歸式和結束條件跟動態規劃很近似,有興趣的朋友可以寫一下哈。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved