Skip to content

Commit 80e7554

Browse files
author
刘昌喜
committed
commit
1 parent f6d1798 commit 80e7554

File tree

2 files changed

+138
-0
lines changed

2 files changed

+138
-0
lines changed

leetcode/62unique-paths.go

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package leetcode
2+
3+
/*
4+
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。
5+
6+
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
7+
8+
问总共有多少条不同的路径?
9+
10+
11+
例如,上图是一个7 x 3 的网格。有多少可能的路径?
12+
13+
14+
示例 1:
15+
16+
输入: m = 3, n = 2
17+
输出: 3
18+
解释:
19+
从左上角开始,总共有 3 条路径可以到达右下角。
20+
1. 向右 -> 向右 -> 向下
21+
2. 向右 -> 向下 -> 向右
22+
3. 向下 -> 向右 -> 向右
23+
示例 2:
24+
25+
输入: m = 7, n = 3
26+
输出: 28
27+
28+
29+
提示:
30+
31+
1 <= m, n <= 100
32+
题目数据保证答案小于等于 2 * 10 ^ 9
33+
通过次数85,793提交次数143,826
34+
35+
来源:力扣(LeetCode)
36+
链接:https://leetcode-cn.com/problems/unique-paths
37+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
38+
*/
39+
40+
func UniquePaths(m int, n int) int {
41+
if m == 1 || n == 1 {
42+
return 1
43+
}
44+
if m > n {
45+
return UniquePaths(n, m)
46+
}
47+
48+
var a [][]int
49+
for i := 0; i < m; i++ {
50+
var list []int
51+
for j := 0; j <= n; j++ {
52+
list = append(list, 0)
53+
}
54+
a = append(a, list)
55+
}
56+
57+
for i := 0; i < m; i++ {
58+
a[i][0] = 1
59+
}
60+
61+
for i := 0; i < n; i++ {
62+
a[0][i] = 1
63+
}
64+
65+
for i := 1; i < m; i++ {
66+
for j := 1; j < n; j++ {
67+
a[i][j] = a[i-1][j] + a[i][j-1]
68+
}
69+
}
70+
71+
return a[m-1][n-1]
72+
}

leetcode/62unique-paths_test.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package leetcode_test
2+
3+
import (
4+
"github.com/randomSignal/algorithmWorkbook/leetcode"
5+
"github.com/stretchr/testify/require"
6+
"testing"
7+
)
8+
9+
/*
10+
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。
11+
12+
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
13+
14+
问总共有多少条不同的路径?
15+
16+
17+
18+
例如,上图是一个7 x 3 的网格。有多少可能的路径?
19+
20+
21+
22+
示例 1:
23+
24+
输入: m = 3, n = 2
25+
输出: 3
26+
解释:
27+
从左上角开始,总共有 3 条路径可以到达右下角。
28+
1. 向右 -> 向右 -> 向下
29+
2. 向右 -> 向下 -> 向右
30+
3. 向下 -> 向右 -> 向右
31+
示例 2:
32+
33+
输入: m = 7, n = 3
34+
输出: 28
35+
36+
37+
提示:
38+
39+
1 <= m, n <= 100
40+
题目数据保证答案小于等于 2 * 10 ^ 9
41+
通过次数85,793提交次数143,826
42+
43+
来源:力扣(LeetCode)
44+
链接:https://leetcode-cn.com/problems/unique-paths
45+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
46+
*/
47+
48+
func TestUniquePaths(t *testing.T) {
49+
var res int
50+
51+
type Sample struct {
52+
M int
53+
N int
54+
Result int
55+
}
56+
57+
sampleList := []Sample{
58+
{M: 3, N: 2, Result: 3},
59+
{M: 7, N: 3, Result: 28},
60+
{M: 51, N: 9, Result: 1916797311},
61+
}
62+
for i := 0; i < len(sampleList); i++ {
63+
res = leetcode.UniquePaths(sampleList[i].M, sampleList[i].N)
64+
require.Equal(t, sampleList[i].Result, res)
65+
}
66+
}

0 commit comments

Comments
 (0)