zoukankan      html  css  js  c++  java
  • 力扣(LeetCode)试题62-不同路径 C++代码

    题目描述:

    一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。

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

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

    解法一:递归(超过时间限制,通过用例41 / 62 个

    步骤一:递推公式:uniquePaths(m,n) = uniquePaths(m-1,n)+uniquePaths(m,n-1)

    步骤二:返回条件:if(m==0 || n==0) return 0;  if(m==1 || n==1) return 1;

    代码:

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

    解法二:动态规划

    步骤一:递推公式(状态转移方程):Finish[i][j] = Finish[i][j - 1] + Finish[i - 1][j]

    步骤二:缓存复用:

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

    代码:

    class Solution {
    public:
        int uniquePaths(int m, int n)
        {
            vector< vector<int> > Finish(m, vector<int>(n));
            for (int i = 0; i<m; i++)
            {
                for (int j = 0; j<n; j++)
                {
                    if (i == 0 || j == 0) Finish[i][j] = 1;
                    else Finish[i][j] = Finish[i][j - 1] + Finish[i - 1][j];
                }
            }
            return Finish[m - 1][n - 1];
        }
    };

  • 相关阅读:
    C++ 虚函数表解析
    函数调用运算符重载
    成员访问运算符重载
    递增和递减运算符重载
    java 如何查看jdk版本&位数
    oracle 11g完美卸载
    win10 你没有足够的权限执行此操作。
    maven 找不到或无法加载主类
    eclipse 如何对maven项目进行打包?
    Core Dataeasy出现的错误
  • 原文地址:https://www.cnblogs.com/pgzhanglin/p/13625166.html
Copyright © 2011-2022 走看看