题目:
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/unique-paths著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法
-
起点:(0,0);终点(m - 1,n- 1);值:从起点到目标点有多少路径
-
递推公式:dp[i][j] = dp[i - 1][j] + dp[i][j - 1];只有两个方向
-
初始化:将上和左两个边初始化
for(int i = 0; i < m; i++) dp[i][0] = 1;
for(int j = 0; j < n; j++) dp[0][j] = 1;
-
遍历顺序:根据递推公式,都是从左和上而来,那么就从左到右一层一层遍历
-
举例推导:
1 | 1 | 1 |
---|---|---|
1 | 2 | 3 |
1 | 3 | 4 |
1 | 4 | 5 |
代码
class Solution {
public:
int uniquePaths(int m, int n) {
vector<vector<int>> dp(m, vector<int>(n, 0));
for (int i = 0; i < m; i++) dp[i