62.不同路径

82 阅读1分钟

题目:
一个机器人位于一个 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]
}