leetcode 62 不同路徑

2021-09-23 07:37:29 字數 1486 閱讀 6979

題目描述:

乙個機械人位於乙個 m x n 網格的左上角 (起始點在下圖中標記為「start」 )。

機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角(在下圖中標記為「finish」)。

問總共有多少條不同的路徑?

例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?

說明:m 和 n 的值均不超過 100。

示例 1:

輸入: m = 3, n = 2

輸出: 3

解釋:從左上角開始,總共有 3 條路徑可以到達右下角。

1. 向右 -> 向右 -> 向下

2. 向右 -> 向下 -> 向右

3. 向下 -> 向右 -> 向右

示例 2:

輸入: m = 7, n = 3

輸出: 28

問題分析:

這是乙個尋找路徑條數的問題,而且存在乙個限制條件:機械人只能向右走或者向下走,這樣的話就意味著如鏡中不存在向左走再向右走這樣無解的情況。除此我們對圖進行分析可以知道,當機械人走到了與終點同一行或者同一列的位置時,就只有一條路徑方案了,敏銳的人可能發現了,這個可以做為遞迴的終止條件,那麼我們如何確定遞迴的劃分呢?遞迴的劃分其實在題目中已經告訴了我們方法。題目高告訴我們機械人只能向下或者向右,這是不是就意味著兩條遞迴路徑呢。

舉個例項,就假設當前機械人在座標(1,5)處,終點在(2,6)處,這樣的話,我們可以發現機械人向右走得時候只有一條路徑,向下走得時候也只有一條路徑,那麼從點(1,5)到(2,6)就有turnringht+turndown=2種路徑了,在向上一層,例如(1,4)到(2,6)向下只有一條路徑,向右走一步就到了(1,5)由之前的結果我們就可以知道有兩條路徑,這樣的話,(1,4)到(2,6)有3條路徑。

**如下:

class solution 

cache=new int[row][column];

return recursion(column,row,0,0);

}public int recursion(int column,int row,int x,int y)

if(cache[x][y]!=0)

int right= recursion(column,row,x+1,y);

int down= recursion(column,row,x,y+1);

cache[x][y]=right+down;

return right+down;}}

因為單純的使用遞迴會使得的時間和空間消耗過大,不滿足題意,所以在**中使用了備忘錄模式,新增了乙個快取用來儲存已經走過的點到終點的路徑數量。

Leetcode 62 不同路徑

乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?說明 m 和 n 的值均不超過 100。示例 ...

leetcode 62 不同路徑

時間複雜度o n2 def uniquepaths m,n 計算路徑的個數 memo 0 for j in range n for i in range m for i in range m for j in range n if i 0 and j 0 memo i j 1 elif j 0 me...

LeetCode 62 不同路徑

乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?說明 m 和 n 的值均不超過 100。示例 ...