乙個機械人位於乙個 m x n 網格的左上角 (起始點在下圖中標記為「start」 )。
機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角(在下圖中標記為「finish」)。
問總共有多少條不同的路徑?
思路:
從起點 (x=0,y=0)(x=0,y=0)(x=0,y=0) 出發,下一步只能向右或者向下到達第二點,向右則為 (x+1,y)(x+1,y)(x+1,y) 向下則為 (x,y+1)(x,y+1)(x,y+1),一直到 (x=m,y=n)(x=m,y=n)(x=m,y=n) 這個點則為結束點視為一條路徑。
因此從起點到終點的所有路徑總數則為 222 個 以第二個點到終點的路徑數的總和。
//static int ve[101][101] = ; //0s
vector> ve(101,vector(101,0)); //4s
class solution
};
乙個機械人位於乙個 m x n 網格的左上角 (起始點在下圖中標記為「start」 )。
機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角(在下圖中標記為「finish」)。
現在考慮網格中有障礙物。那麼從左上角到右下角將會有多少條不同的路徑?
class solution {
public:
int uniquepathswithobstacles(vector>& obstaclegrid) {
int r = obstaclegrid.size();
int c = obstaclegrid[0].size();
//obstaclegrid陣列儲存的是到達這一位置的路徑數
//如果第乙個節點處的值就為1,那機械人一步也走不了
if(obstaclegrid[0][0] == 1)
return 0;
obstaclegrid[0][0] = 1;
//從0,0 出發先看最邊上的這一列是否有障礙物,並且計算到邊上的某一點的路徑
for(int i=1; i複雜度分析
時間複雜度 : o(m×n)o(m \times n)o(m×n) 。長方形網格的大小是 m×nm \times nm×n,而訪問每個格點恰好一次。
空間複雜度 : o(1)o(1)o(1)。我們利用 obstaclegrid 作為 dp 陣列,因此不需要額外的空間。
LeetCode 不同路徑 i ii
q 乙個機械人在m n大小的地圖的左上角 起點,下圖中的標記 start 的位置 機械人每次向下或向右移動。機械人要到達地圖的右下角。終點,下圖中的標記 finish 的位置 可以有多少種不同的路徑從起點走到終點?備註 m和n小於等於100 a 典型動態規劃問題了。public int unique...
動態規劃 不同路徑(I,II
不同路徑 乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?說明 m 和 n 的值均不超過 10...
不同路徑(LeetCode)
乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?說明 m 和 n 的值均不超過 100。示例 ...