【每日一题】 62-不同路径

79 阅读1分钟

题目描述

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