题目描述
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
来源:力扣(LeetCode) 链接:leetcode.cn/problems/un… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
利用动态规划方法, 每格的路径等于上格和左格的路径和 状态转移方程为 dp[i][j] = dp[i-1][j] + dp[i][j-1]
坑
首先使用了递归的方法,显而易见超时了
//func uniquePaths(m int, n int) int {
// if m == 1 {
// return 1
// }
// if n == 1 {
// return 1
// }
// return uniquePaths(m-1, n) + uniquePaths(m, n-1)
//}
todo 还有一种组合数学的方法,无需利用额外空间
解法
func uniquePaths(m int, n int) int {
mat := make([][]int, m)
for i, _ := range mat {
mat[i] = make([]int, n)
mat[i][0] = 1
}
for j := 0; j < n; j++ {
mat[0][j] = 1
}
for i := 1; i < m; i++ {
for j := 1; j < n; j++ {
mat[i][j] = mat[i-1][j] + mat[i][j-1]
}
}
return mat[m-1][n-1]
}