62. 不同路径【动态规划】

https://leetcode-cn.com/problems/unique-paths/
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。

问总共有多少条不同的路径?

我的方法一:动态规划

步骤

  1. 确认状态
    1.1 最后一步:到达第(m, n)点,或者从(m-1, n)过来,或者从(m, n-1)过来
    1.2 子问题:f(m, n)可以转化为f(m-1, n)和(m, n-1)两个问题
  2. 转移方程
    f(m, n) = f(m-1, n) + f(m, n-1)
  3. 初始条件和边界条件
    3.1 m>0, n>0
    3.2 f(1, 1) = 1, f(*, 0) = 0, f(0, *) = 0
  4. 计算顺序
    f(1, 1), f(1,2), f(2,1) f(m, n)

复杂度

时间复杂度:O(mxn)
空间复杂度:O(mxn)

代码

class Solution {
public:
    int uniquePaths(int m, int n) {
        if(m < 1 || n<1){
            return 0;
        }

        int ** f = new int*[m+1];
        for(int i = 0; i<=m; i++){
            f[i] = new int[n+1];
            for(int j = 0; j<=n; j++){
                f[i][j] = 0;
            }
        }

        f[1][1] = 1;

        for(int i = 1; i<=m; i++){
            for(int j = 1; j<=n; j++){
                if(i>1 || j>1){
                    f[i][j] = f[i][j-1]+f[i-1][j];
                }
            }
        }

        int count = f[m][n];
        
        for(int i = 0; i<=m; i++){
            delete[] f[i];
            f[i] = 0;
        }
        delete[] f;
        f = 0;
        
        return count;
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容