File tree Expand file tree Collapse file tree 1 file changed +68
-0
lines changed Expand file tree Collapse file tree 1 file changed +68
-0
lines changed Original file line number Diff line number Diff line change 1+ /*
2+ * @lc app=leetcode.cn id=62 lang=golang
3+ *
4+ * [62] 不同路径
5+ *
6+ * https://leetcode-cn.com/problems/unique-paths/description/
7+ *
8+ * algorithms
9+ * Medium (55.98%)
10+ * Likes: 330
11+ * Dislikes: 0
12+ * Total Accepted: 41.8K
13+ * Total Submissions: 73.9K
14+ * Testcase Example: '3\n2'
15+ *
16+ * 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。
17+ *
18+ * 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
19+ *
20+ * 问总共有多少条不同的路径?
21+ *
22+ *
23+ *
24+ * 例如,上图是一个7 x 3 的网格。有多少可能的路径?
25+ *
26+ * 说明:m 和 n 的值均不超过 100。
27+ *
28+ * 示例 1:
29+ *
30+ * 输入: m = 3, n = 2
31+ * 输出: 3
32+ * 解释:
33+ * 从左上角开始,总共有 3 条路径可以到达右下角。
34+ * 1. 向右 -> 向右 -> 向下
35+ * 2. 向右 -> 向下 -> 向右
36+ * 3. 向下 -> 向右 -> 向右
37+ *
38+ *
39+ * 示例 2:
40+ *
41+ * 输入: m = 7, n = 3
42+ * 输出: 28
43+ *
44+ */
45+ func uniquePaths (m int , n int ) int {
46+ if m <= 0 || n <= 0 {
47+ return 0
48+ }
49+ // paths[i][j] = paths[i-1][j] + paths[i][j-1]
50+ // 可换成1维度数组,只留下列,可以发现dp[j] = dp[j] + dp[j-1]
51+ // 1, 1, 1, 1, 1, 1, 1
52+ // 1, 2, 3, 4, 5, 6, 7
53+ // 1, 3, 6, 10,15,21,28
54+ dp := make ([]int , n )
55+ for i := 0 ; i < n ; i ++ { // 第1行全是1
56+ dp [i ] = 1
57+ }
58+ for i := 1 ; i < m ; i ++ { // 第1行全是1
59+ for j := 1 ; j < n ; j ++ { // 第一列全是1
60+ dp [j ] = dp [j ] + dp [j - 1 ]
61+ }
62+ }
63+ return dp [n - 1 ]
64+ }
65+ // 题目是一个组合问题,机器人必然要向下走m-1步,向右走n-1步
66+ // 换个角度看,机器人必定要走m+n-2步,其中选出m-1步往下走,这就变成了一个组合数问题
67+ // 假设m<=n,那么结果就是C(m-1,m+n-2),而C(m, n)=n!/(m!*(n-m)!)
68+
You can’t perform that action at this time.
0 commit comments