算法leetcode|62. 不同路径(rust重拳出击)


文章目录


62. 不同路径:

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

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

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

样例 1:

复制代码
输入:

	m = 3, n = 7
	
输出:

	28

样例 2:

复制代码
输入:

	m = 3, n = 2
	
输出:

	3
	
解释:

	从左上角开始,总共有 3 条路径可以到达右下角。
	1. 向右 -> 向下 -> 向下
	2. 向下 -> 向下 -> 向右
	3. 向下 -> 向右 -> 向下

样例 3:

复制代码
输入:
	
	m = 7, n = 3
	
输出:
	28

样例 4:

复制代码
输入:
	
	m = 3, n = 3
	
输出:
	
	6

提示:

  • 1 <= m, n <= 100
  • 题目数据保证答案小于等于 2 * 109

分析:

  • 面对这道算法题目,二当家的再次陷入了沉思。
  • 每一个点的不同路径数是到达上面点的不同路径数与到达左面不同路径数的和。所以可以考虑动态规划,第一行因为只能向右移动,所以不同路径数都是1,同样第一列也是如此,只能向下移动,所以不同路径数也是1。
  • 动态规划很直观,但是需要双循环。还可以考虑转化为数学问题,知道了行列数,所以一共向右和向下移动的步数是已知条件,我们能选择的只是向右移动和向下移动的顺序。有 m 行,和 n 列,所以需要向右移动 m - 1 次,向下移动 n - 1 次,总共移动 m + n - 2 次,所以相当于是从 m + n - 2 移动中选择 m - 1 次向右移动(与从 m + n - 2 移动中选择 n - 1 次向下移动值相等),转化为了组合数问题。

题解:

rust:

rust 复制代码
impl Solution {
    pub fn unique_paths(m: i32, n: i32) -> i32 {
        let (m, n) = (m.min(n) as u64, m.max(n) as u64);
        (1..m).fold(1, |ans, y| ans * (y + n - 1) / y) as i32
    }
}

go:

go 复制代码
func uniquePaths(m int, n int) int {
    return int(new(big.Int).Binomial(int64(m+n-2), int64(n-1)).Int64())
}

c++:

cpp 复制代码
class Solution {
public:
    int uniquePaths(int m, int n) {
        long long ans = 1;
        for (int x = n, y = 1; y < m; ++x, ++y) {
            ans = ans * x / y;
        }
        return ans;
    }
};

python:

python 复制代码
class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        return comb(m + n - 2, n - 1)

java:

java 复制代码
class Solution {
    public int uniquePaths(int m, int n) {
        long ans = 1;
        for (int x = n, y = 1; y < m; ++x, ++y) {
            ans = ans * x / y;
        }
        return (int) ans;
    }
}

非常感谢你阅读本文~

欢迎【点赞】【收藏】【评论】三连走一波~

放弃不难,但坚持一定很酷~

希望我们大家都能每天进步一点点~

本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~


相关推荐
码农阿豪2 分钟前
Flask应用上下文问题解析与解决方案:从错误日志到完美修复
后端·python·flask
威迪斯特10 分钟前
Flask:轻量级Web框架的技术本质与工程实践
前端·数据库·后端·python·flask·开发框架·核心架构
独好紫罗兰30 分钟前
对python的再认识-基于数据结构进行-a003-列表-排序
开发语言·数据结构·python
wuhen_n37 分钟前
JavaScript内置数据结构
开发语言·前端·javascript·数据结构
努力学算法的蒟蒻37 分钟前
day79(2.7)——leetcode面试经典150
算法·leetcode·职场和发展
2401_8414956442 分钟前
【LeetCode刷题】二叉树的层序遍历
数据结构·python·算法·leetcode·二叉树··队列
AC赳赳老秦43 分钟前
2026国产算力新周期:DeepSeek实战适配英伟达H200,引领大模型训练效率跃升
大数据·前端·人工智能·算法·tidb·memcache·deepseek
毕设源码-钟学长1 小时前
【开题答辩全过程】以 基于Springboot的扶贫众筹平台为例,包含答辩的问题和答案
java·spring boot·后端
独好紫罗兰1 小时前
对python的再认识-基于数据结构进行-a002-列表-列表推导式
开发语言·数据结构·python
2401_841495641 小时前
【LeetCode刷题】二叉树的直径
数据结构·python·算法·leetcode·二叉树··递归