62.不同路徑
// 動態規劃清晰步驟: 1. 定義dp陣列 2. 初始化 3. 迴圈填充 4. 返回結果
class solution
}// 4. 返回結果
return dp[m - 1][n - 1];
}}// 動態規劃寫法2: 內部解決初始化問題
class solution2 else if (i != 0 && j == 0) else if (i == 0 && j == 0) else }}
return dp[m - 1][n - 1];
}}// 深度優先搜尋dfs: 可以遍歷二叉樹, 可以從頭到尾遍歷每一條路徑(更徹底), 但是本題只需要知道多少條路徑。所以是充分不必要條件。
// 所有尋路的過程可以連線成乙個二叉樹, 每個葉子節點說明一條路徑
class solution3
public int uniquepaths(int m, int n)
}// 剪枝, leetcode中還是會超時
class solution4
public int uniquepaths(int m, int n)
}// 排列組合思路:我們需要移動 (m - 1) + (n - 1)次,其中有 m−1 次向下移動,n−1 次向右移動。因此路徑的總數,就等於從 m+n−2 次移動中選擇 m−1 次向下移動的方案數,即組合數:
// 計算是全排列然後去重
63. 不同路徑 ii
// 本題很簡單, 只需要將62題, dp陣列對於障礙物的位置改為0即可: 1. 定義dp陣列 2. 初始化 3. 迴圈填充 4. 返回結果
class solution
}// 4. 返回結果
return dp[m - 1][n - 1];
}}
63 不同路徑 II
乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 現在考慮網格中有障礙物。那麼從左上角到右下角將會有多少條不同的路徑?網格中的障礙物和空位置分別用1和0來表示。說明 m 和 n...
63 不同路徑 II
dfs深度優先 超出時間限制 class solution def uniquepathswithobstacles self,obstaclegrid list list int int if obstaclegrid return 0if obstaclegrid 0 0 1 return 0 ...
63 不同路徑 II
乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 現在考慮網格中有障礙物。那麼從左上角到右下角將會有多少條不同的路徑?網格中的障礙物和空位置分別用 1 和 0 來表示。說明 m...