算法课第八周作业 | Unique Paths

来源:互联网 发布:java oa系统 源码下载 编辑:程序博客网 时间:2024/06/04 18:45

写在前面:

这两周都是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];    }};


运行结果:

0 0
原创粉丝点击