前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【leetcode刷题】20T28-不同路径

【leetcode刷题】20T28-不同路径

作者头像
木又AI帮
发布2020-03-12 14:36:36
3510
发布2020-03-12 14:36:36
举报
文章被收录于专栏:木又AI帮木又AI帮

木又同学2020年第28篇解题报告

leetcode第62题:不同路径

https://leetcode-cn.com/problems/unique-paths/


【题目】

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

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

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

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

说明:mn 的值均不超过 100。

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

示例 2:
输入: m = 7, n = 3
输出: 28

【思路】

这是一道典型的排列组合题,机器人走到右下角,需要向下走m-1步,向右走n-1步,那么唯一路径的总数为(m - 1 + n - 1)! / ((m - 1)! * (n - 1)!)。

【代码】

python版本

代码语言:javascript
复制
class Solution(object):
    def uniquePaths(self, m, n):
        """
        :type m: int
        :type n: int
        :rtype: int
        """
        # 排列组合问题
        # 实际上,向下走m-1步,向右走n-1步
        # (m+n-2)! / ((m-1)! * (n-1)!)
        res = 1
        for i in range(m, m + n - 1):
            res *= i
        for i in range(1, n):
            res /= i
        return res

C++版本

代码语言:javascript
复制
class Solution {
public:
    int uniquePaths(int m, int n) {
        // 总步数 m+n-2
        double res = 1;
        if(m < n){
            int tmp = m;
            m = n;
            n = tmp;
        }
        for(int i=m, j=1; i<m+n-1; i++, j++){
            res *= i;
            if(j < n)
                res /= j;
        }
        return res;
    }
};
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 木又AI帮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档