Leetcode C++《热题 Hot 100-39》62.不同路径

Leetcode C++《热题 Hot 100-39》62.不同路径

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

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

问总共有多少条不同的路径?
说明:m 和 n 的值均不超过 100。

示例 1:

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

  1. 向右 -> 向右 -> 向下
  2. 向右 -> 向下 -> 向右
  3. 向下 -> 向右 -> 向右

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/unique-paths
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  1. 思路
  • 方案1:感觉递归大法就能做hh,然后m=23, n=12超时了【也可以延伸成动态规划】
  • 方案2:数学大法,一定要走m+n-2步,从中选择m-1向下,其余向右;
  1. 代码
class Solution {
public:
    //方案1:感觉递归大法就能做hh,然后m=23, n=12超时了
    /*int targetX;
    int targetY;
    int uniquePaths(int m, int n) {
        targetX = m-1;
        targetY = n-1;
        return getPathNum(0,0);
    }

    
    int getPathNum(int x, int y) {
        //向下 x y+1
        //向右 x+1 y 
        //左上角坐标 0 0, 目标坐标[m-1, n-1]
        if (x == targetX && y== targetY)
            return 1;
        if (x > targetX || y > targetY)
            return 0;
        return getPathNum(x, y+1)+getPathNum(x+1, y);
    }*/

    //方案2:数学大法,一定要走m+n-2步,从中选择m-1向下,其余向右;组合数学计算大法!
    int uniquePaths(int m, int n) {
        long long res = 1; //注意乘法可能会爆栈的
        int t = min(m, n);
        for (int i = 0; i < t-1; i++) {
            //cout << i << " " << res << endl;
            res = res * (m+n-2-i);
            res = res / (i+1);
        }
            
         return res;
    }
   
};
发布了205 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Alexia23/article/details/104199731
今日推荐