zoukankan      html  css  js  c++  java
  • LeetCode(62):不同路径

    Medium!

    题目描述:

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

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

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

    例如,上图是一个7 x 3 的网格。有多少可能的路径?

    说明:m 和 的值均不超过 100。

    示例 1:

    输入: m = 3, n = 2
    输出: 3
    解释:
    从左上角开始,总共有 3 条路径可以到达右下角。
    1. 向右 -> 向右 -> 向下
    2. 向右 -> 向下 -> 向右
    3. 向下 -> 向右 -> 向右
    

    示例 2:

    输入: m = 7, n = 3
    输出: 28

    解题思路:

    这道题是每次可以向下走或者向右走,求到达最右下角的所有不同走法的个数。我们需要用动态规划Dynamic Programming来解,我们可以维护一个二维数组dp,其中dp[i][j]表示到当前位置不同的走法的个数,然后可以得到递推式为: dp[i][j] = dp[i - 1][j] + dp[i][j - 1],这里为了节省空间,我们使用一维数组dp,一行一行的刷新也可以。

    C++解法一:

     1 // DP
     2 class Solution {
     3 public:
     4     int uniquePaths(int m, int n) {
     5         vector<int> dp(n, 1);
     6         for (int i = 1; i < m; ++i) {
     7             for (int j = 1; j < n; ++j) {
     8                 dp[j] += dp[j - 1]; 
     9             }
    10         }
    11         return dp[n - 1];
    12     }
    13 };

    其实还有另一种很数学的解法,参见https://blog.csdn.net/linhuanmars/article/details/22126357

    实际相当于机器人总共走了m + n - 2步,其中m - 1步向下走,n - 1步向右走,那么总共不同的方法个数就相当于在步数里面m - 1和n - 1中较小的那个数的取法,实际上是一道组合数的问题。

    C++解法二:

     1 class Solution {
     2 public:
     3     int uniquePaths(int m, int n) {
     4         double num = 1, denom = 1;
     5         int small = m > n ? n : m;
     6         for (int i = 1; i <= small - 1; ++i) {
     7             num *= m + n - 1 - i;
     8             denom *= i;
     9         }
    10         return (int)(num / denom);
    11     }
    12 };
  • 相关阅读:
    List of the best open source software applications
    Owin对Asp.net Web的扩展
    NSwag给api加上说明
    'workspace' in VS Code
    unable to find valid certification path to requested target
    JMeter的下载以及安装使用
    exception disappear when forgot to await an async method
    Filter execute order in asp.net web api
    记录web api的request以及response(即写log)
    asp.net web api的源码
  • 原文地址:https://www.cnblogs.com/ariel-dreamland/p/9149761.html
Copyright © 2011-2022 走看看