题目:
一个机器人位于一个 m x n **网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
算法:
方法一:动态规划
dp[i][j] 保存从(0,0)移动到(i,j)位置的方法,
状态转移方程dp[i][j] = dp[i-1][j] + dp[i][j-1]
func uniquePaths(m int, n int) int {
// 状态转移方程dp[i][j] = dp[i-1][j] + dp[i][j-1]
dp := make([][]int, m)
for i := range dp {
dp[i] = make([]int, n)
}
dp[0][0] = 1
for i := 0; i < m; i ++ {
for j := 0; j < n; j ++ {
if i == 0 && j == 0 {
continue
}
up := 0
if i - 1 >= 0 {
up = dp[i - 1][j]
}
left := 0
if j - 1 >= 0 {
left = dp[i][j - 1]
}
dp[i][j] = left + up
}
}
return dp[m - 1][n - 1]
}