栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

力扣62不同路径

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

力扣62不同路径

力扣62不同路径 题目详情

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

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

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

输入输出样例
输入:m = 3, n = 7
输出:28
输入:m = 3, n = 2
输出:3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
1. 向右 -> 向下 -> 向下
2. 向下 -> 向下 -> 向右
3. 向下 -> 向右 -> 向下
输入:m = 7, n = 3
输出:28
输入:m = 3, n = 3
输出:6
算法1:动态规划
    //使用动态规划的方法
    int uniquePaths(int m,int n)
    {
        //初始化数组,m行,n列
        vector>dp(m,vector(n));
        //当点在边界的时候,则  其路径只有一条

        for(int i=0;i
            dp[i][0]=1;
        }
        for(int i=0;i
            dp[0][i]=1;
        }
    //路径只与该点的左边和上边的位置有关
        for(int i=1;i
            for(int j=1;j
                dp[i][j]=dp[i][j-1]+dp[i-1][j];
            }
        }
        return dp[m-1][n-1];
    }
算法2,利用数学公式推导
    //使用数学规律进行计算
    int uniquePaths2(int n,int m)
    {
        long long ans=1;


    //利用公式 (m+n-2)!/((m-1)!*(n-1)!)  约掉 ((m+n-2)..._(n))/(m-1)!

        for(int x=n,y=1;y
            ans=ans*x/y;
        }
        //递交leetcode会溢出
        // long long res=coutFac(m+n-2)/(coutFac(m-1)*coutFac(n-1));
        return ans;
    }

   long long coutFac(int x)
    {
        long long sum=1;
        for(int i=1;i<=x;i++)
        {
            sum*=i;
        }
        return sum;
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/979946.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号