經典dp 不同路徑系列之Go寫法

2021-10-09 23:22:26 字數 906 閱讀 4118

這是乙個dp問題,最重要的是需要找到乙個狀態轉移方程。從題目可見,機械人只能向右或者向左走,因此對於到達某乙個節點,其主要有兩條路徑可以到達,也就是說從上面的節點以及左邊的節點過來。

而假定我們有乙個dp二維陣列,大小為m x n, 然後儲存的值是到達這個節點的路徑數目,根據上面所述,我們有狀態轉移方程:

dp[i][j] = dp[i-1][j] + dp[i][j-1]

特別地,這裡可以使用優化空間版本的dp陣列,也就是乙個大小為n的一位陣列,從左到右更新dp陣列,dp[i-1]就是左邊的節點,而dp[i]在未更新的情況下實際是儲存上一行節點的路徑資訊,也就是說dp[i]就是儲存上面節點的路徑資訊,因此有轉移方程:

dp[i] = dp[i-1] + dp[i]

// accept code

func

uniquepaths

(m int

, n int

)int

for i:=

1; i < m; i++

// fmt.println(dp)

}return dp[n-1]

}

類似i的**建立乙個陣列來儲存之前的路徑,但是需要注意的是:

// accept code

func

uniquepathswithobstacles

(obstaclegrid [

]int

)int

else

}for i :=

1; i < m; i++

// 對dp[0]進行檢查

for j :=

1; j < n; j++

else}}

return dp[n-1]

}

LeetCode 62 不同路徑(DP)

本題目算是面試比較常見的了,主要考察對演算法的理解,最優的解法是動態規劃,本篇寫一下本題的動態規劃思路和解法。題目描述 乙個機械人位於乙個 m x n 網格的左上角 起始點為圖中的 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 圖中標記為 finish 問總共有多少條不...

62 不同路徑63 不同路徑 II

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 ...

leetcode系列 演算法 中等 不同路徑

從1,1格仔,走到m,n格仔,需要向右邊走m 1步,向下走n 1步,一共走m n 2步 在這m n 2步中,只要隨機挑選出m 1步向右邊走,或者n 1步向下走,就能夠走到終點 所以轉換成了排列組合問題,一共有 因為走到m 1,n格仔,或者m,n 1格仔之後,都只有一種方法走到m,n格仔 所以走到m,...