62.不同路径

  • 题目详述

62. 不同路径

 

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

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

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

https://i-blog.csdnimg.cn/blog_migrate/a9d710311ab12af6970636a006576dc1.png

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

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

示例 1:

输入: m = 3, n = 2

输出: 3

解释:

从左上角开始,总共有 3 条路径可以到达右下角。

1. 向右 -> 向右 -> 向下

2. 向右 -> 向下 -> 向右

3. 向下 -> 向右 -> 向右

示例 2:

输入: m = 7, n = 3

输出: 28

 

二.自我探寻(这道题自己用递归做的很差 可以直接跳到网络学习过程)

思路:一条路径的特征是在哪个点下去(或者哪个点向右走)

代码:class Solution {

    public int uniquePaths(int m, int n) {

        int sum=0;

         if(m==1||n==1)

         {

             return 1;

         }

         int p=Math.max(m,n);

         int q=Math.min(m,n);

          for(int i=p;i>0;i--)

          {

             sum=sum+painttree(q-1,1,i);

          }

          return sum;

    }

     public static int painttree(int n,int h,int q)/**n树应该的高度,h树目前的高度,q目前点的值**/

     {

         

         if(h==n-1)

            return q;

          if(h==n)

              return 1;

        int sum=0;

        for(int j=q;j>0;j--) {

            sum=sum+ painttree(n,h+1, j);

        }

        return sum;

     }

}

评价:

  • 网络学习过程

思路:与之前想的有点类似,一条路径不同于其他路径的特征是在哪里选择向下。而走到终点 一定是m+n-2步,是一个组合问题,在这些总步数中挑n-1步向下即可

C(m+n-2,n-1) 而代码求解组合公式  都是O(n),同时在按照这个思路编程时 遇到了两个问题 

  1. 超出int界限,用long类型
  2. 拿m=7,n=3举例 公式如下  8!/ (2!*6!)

我们算过这个公式 都知道 可以简化 成   7*8/2!

故代码也可以简化

      代码:class Solution {

    public int uniquePaths(int m, int n) {

           long a=1;

         long b=1;

         int p=Math.max(m,n);

         int q=Math.min(m,n);

         for(int i=p;i<=p+q-2;i++)

         {

             a=a*i;

         }

         for(int j=1;j<=q-1;j++)

         {

             b=b*j;

         }

         int f=(int)(a/b);

         return f;

    }

}

评价:

 

 

四.Python实现

 
 
 
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值