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

  • 相关阅读:
    代码作色测试
    dm-weka 0001
    中文字符串以及英文字符串的研究
    windows安装ruby on rails
    NoSQL概念
    radis多个盘并发IO
    CSS中的五大字体家族(cursive 手写字体族更吸引我)
    css小技巧
    利用css3-animation来制作逐帧动画
    将DataTable某一列的值整体赋值给 另一个DataTable
  • 原文地址:https://www.cnblogs.com/pgzhanglin/p/13625166.html
Copyright © 2011-2022 走看看