写在前面:
这两周都是DP主题,讲解了DP两种实现方式(递推和记忆化搜索)、Floyd-Warshall算法等。
题意解读:
给定一个m*n的格子,机器人只能向下走或者向右走,
机器人从左上出发,终点为右下格子,问说一共有多少个唯一路径。
解题思路:
采用DP思想解决问题,用数组来保存每个点可到达路径总数。
从(x,y)出发,每次可以通过(x-1,y)和(x,y-1)到达。
所以(x,y)的可到达路径数就是二者相加。
到达终点的路经数就是终点所对应数组的值。
代码:
class Solution {
public:
int uniquePaths(int m, int n) {
if (m == 0 || n == 0) {
return 0;
}
vector<vector<int>> path(m,vector<int>(n,0));
for (int i = 0; i < m; i++)
path[i][0] = 1;
for (int i = 0; i < n; i++)
path[0][i] = 1;
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
path[i][j] = path[i-1][j] + path[i][j-1];
}
}
return path[m-1][n-1];
}
};
运行结果: