動態規劃 不同的路徑

2021-08-22 18:03:31 字數 1711 閱讀 9089

有乙個機械人的位於乙個 m × n 個網格左上角。

機械人每一時刻只能向下或者向右移動一步。機械人試圖達到網格的右下角。

問有多少條不同的路徑?

給出 m =3和 n =3, 返回6.

給出 m =4和 n =5, 返回35.

n和m均不超過100

剛做這個題目的時候,自己先在本子上畫了畫路徑,並舉了幾個例子,發現沒有什麼聯絡。想想前面的幾道題目,都會對第一行和第一列進行處理。在這個題目中,到達第一行或者第一列都會只有一種路徑,而到達(i,j)位置的路徑數,就是(i-1,j)位置和(i,j-1)位置的相加的和(這個自己舉個例子就可以理解了)。

**:

public class solution {

/*** @param m: positive integer (1 <= m <= 100)

* @param n: positive integer (1 <= n <= 100)

* @return: an integer

*/public int uniquepaths(int m, int n) {

// write your code here

if(m==0||n==0)

return 0;

int res= new int[m][n];

for(int i=0;i**交上去對了,確實有點開心,但是自己設計的太耗時。。。

對自己的**做出如下優化:

public class solution {

/*** @param m: positive integer (1 <= m <= 100)

* @param n: positive integer (1 <= n <= 100)

* @return: an integer

*/public int uniquepaths(int m, int n) {

// write your code here

if(m==0||n==0)

return 0;

/*int res= new int[m][n];

for(int i=0;i改完之後,在提交:

解釋如下:

機械人總共走m+n-2步,其中m-1步往下走,n-1步往右走,本質上就是乙個組合問題,也就是從m+n-2個不同元素中每次取出m-1個元素的組合數。根據組合的計算公式,我們可以寫**來求解即可。**如下:

public int uniquepaths(int m, int n) {

double dom = 1;

double dedom = 1;

int small = m上面的**求解了組合的結果,只需要做一次行或者列的掃瞄,所以時間複雜度是o(min(m,n)),而空間複雜度是o(1)。比起上面的兩種解法更優。不過這裡有個弊端,就是如果**中的dom和dedom如果不是double,而是用int,那麼會很容易越界,因為這是乙個階乘,所以大家在面試中討論這種方法要注意和提及越界的問題。

動態規劃 不同路徑

乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 img yrgqqaoc 1607527...

動態規劃 不同路徑(I,II

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

62 不同路徑 動態規劃

乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?本質上就是乙個 楊輝三角。這是個楊輝三角形,每個位置的路徑 該位置左邊的路徑 該位置上邊的路徑 動態...