這是乙個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,...