leetcode 62. Unique Paths

本文介绍了求解机器人在网格中从起点到终点的不同行走路径数量的三种方法:递归求解、动态规划思想及数学计算法,并对每种方法进行了详细阐述。

第一种最简单的方法:递归求解:

  • 要求uniquePaths(m,n)=uniquePaths(m-1,n)+uniquePaths(m,n-1)(m>1,n>1)
  • uniquePaths(m,n)=uniquePaths(m-1,n)(,n==1)
  • uniquePaths(m,n)=uniquePaths(m,n-1)(m==1)
  • 终止条件为: m=1,n=1,uniquePaths(m,n)=1;
    int uniquePaths(int m, int n) {
      
        if(m==1&&n==1)
            return 1;
        if(m==1)
            return uniquePaths(m,n-1);
        if(n==1)
            return uniquePaths(m-1,n);
        
        if(m>1&&n>1)
        return uniquePaths(m-1,n)+uniquePaths(m,n-1);
}

  

但是递归方法太费时间,out

第二种方法,动态规划的思想:

  • 建立一个动态规划数组dp[m][n], dp[m][n]=dp[m][n-1]+dp[m-1][n-1];
        vector<vector<int>> dp(m,vector<int> (n,1));
        for(int i=1;i<m;i++)
            for(int j=1;j<n;j++)
            {
                dp[i][j]=dp[i-1][j]+dp[i][j-1];
            }
        
        return dp[m-1][n-1];

  时间复杂度为O(n^2),cost m*nspace

第三种方法: 数学计算法:

如果有4*6 个格子,相当于有3个下,5个右,进行排列组合。得到排列的数目就ok

总共有(m+n)! / (m! * n!)种排列方法

  • m+n个数(m+n)!中排列方式
  • 除去内部相同m 个下和n个右,

 

转载于:https://www.cnblogs.com/fanhaha/p/7348166.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值