Skip to content

Commit 2631551

Browse files
committed
Create 62.不同路径(中等).md
1 parent d8e5d3b commit 2631551

1 file changed

Lines changed: 38 additions & 0 deletions

File tree

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
```text
2+
题目:
3+
一个机器人位于一个 m x n 网格的左上角;
4+
机器人每次只能向下或者向右移动一步,机器人试图达到网格的右下角;
5+
问总共有多少条不同的路径?
6+
1.动态规划:
7+
[1]思路:
8+
(1)dp[i][j]表示从原点(0,0)到坐标位置(i,j)的路线总和;
9+
(2)因为只能往下或往右走,因此从原点到(i,j)的路线总和等于原点到(i-1,j)的路线的总和加原点到(i,j-1)的路线的总和;
10+
因此得到动态转移方程: dp[i][j]=dp[i-1][j]+dp[i][j-1] (i>=1,j>=1)
11+
(3)对i=0或j=0单独分析:
12+
1)i=0对应dp[0][j]即为第一行,从原点到(0,j)只能是一直往右,最终只有一条路径,即dp[0][j]=1;
13+
2)j=0对应dp[i][0]即为第一列,从原点到(i,0)只能是一致往下,最终只有一条路径,即dp[i][0]=1;
14+
[2]实现:
15+
class Solution {
16+
public int uniquePaths(int m, int n) {
17+
int[][] dp = new int[m][n];
18+
// 填充第一列
19+
for (int i = 0; i < m; i++) {
20+
dp[i][0] = 1;
21+
}
22+
// 填充第一行
23+
for (int j = 0; j < n; j++) {
24+
dp[0][j] = 1;
25+
}
26+
// 遍历计算原点到每个位置的路径总和
27+
for (int i = 1; i < m; i++) {
28+
for (int j = 1; j < n; j++) {
29+
dp[i][j] = dp[i-1][j]+dp[i][j-1];
30+
}
31+
}
32+
return dp[m-1][n-1];
33+
}
34+
}
35+
[3]复杂度分析:
36+
(1)时间复杂度: O(m*n),m为行数,n为列数
37+
(2)空间复杂度: O(m*n)
38+
```

0 commit comments

Comments
 (0)