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];
        }
    };

  • 相关阅读:
    calcite 概念和架构
    在vscode中快速生成vue模板
    curl发送post请求
    【vue】chrome已安装Vue Devtools在控制台却无显示
    java(第一天)
    小游戏之莫交叉
    再谈成麻结账程序2.0
    成麻结账程序
    倍福Twincat2 常用快捷键及部分注意事项
    IP地址,子网掩码、默认网关,DNS服务器之间的联系与区别
  • 原文地址:https://www.cnblogs.com/pgzhanglin/p/13625166.html
Copyright © 2011-2022 走看看