[leetcode] 62. 不同路径

文章目录

  • 题目描述
  • 解题方法
    • 方法一:动态规划
      • java代码
      • 复杂度分析
    • 方法二:排列组合
      • java代码
      • 复杂度分析
  • 相似题目

题目描述

一个机器人位于一个 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

解题方法

方法一:动态规划

我们设 f ( i , j ) f(i, j) f(i,j)为机器人从左上角走到 ( i , j ) (i, j) (i,j)的路径数量,若机器人在 ( i , j ) (i,j) (i,j)处,则机器人上一步的位置在 ( i − 1 , j ) (i-1,j) (i1,j)或者 ( i , j − 1 ) (i,j-1) (i,j1)处,由此可推出

  • i > 0 i > 0 i>0 j > 0 j > 0 j>0 时, f ( i , j ) = f ( i − 1 , j ) + f ( i , j − 1 ) f(i,j) = f(i-1,j) + f(i,j-1) f(i,j)=f(i1,j)+f(i,j1)
  • i = 0 i = 0 i=0 j = 0 j = 0 j=0 时, f ( i , j ) = 1 f(i, j) = 1 f(i,j)=1

根据以上规律可完成代码实现。

java代码

public int uniquePaths(int m, int n) {int[][] dp = new int[m][n];for (int i = 0; i < m; i++) {dp[i][0] = 1;}for (int i = 0; i < n; i++) {dp[0][i] = 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 ( M ∗ N ) O(M * N) O(MN),需要遍历一次dp数组。
空间复杂度: O ( M ∗ N ) O(M * N) O(MN),需要提供dp数组的存储空间。

方法二:排列组合

从左上角到右下角,需要 m - 1 次向下移动,n - 1 次向右移动,一共需要进行 m + n - 2 次移动。满足排列组合的规律,则总的路径条数为

C m + n − 2 m − 1 = ( m + n − 2 ) ∗ ( m + n − 1 ) ∗ . . . ∗ ( n − 1 ) ( m − 1 ) ! C^{m - 1}_{m + n - 2}=\frac{(m + n - 2) * (m + n - 1) *...*(n - 1)}{(m-1)!} Cm+n2m1=(m1)!(m+n2)(m+n1)...(n1)

我们只需要编程实现计算排列组合总数。

java代码

public int uniquePaths(int m, int n) {// 取m和n之中的较小值,减少计算排列组合的次数。int small = Math.min(m, n) - 1;// 类型取double防止相乘的最终结果超出类型范围double a = 1;double b = 1;int total = m + n - 2;for (int i = 0; i < small; i++) {a = a * (total - i);b = b * (i + 1);}return (int) (a / b);
}

复杂度分析

时间复杂度: O ( m i n ( m , n ) ) O(min(m,n)) O(min(m,n)),计算排列组合需要参与遍历的次数。
空间复杂度: O ( 1 ) O(1) O(1),只需要提供常数级别的空间存储。

相似题目

[leetcode] 63. 不同路径 II


  • 个人公众号
    个人公众号
  • 个人小游戏
    个人小游戏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/670106.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试官:关于HTTPS/HTTP2/HTTP3你懂多少?

公众号&#xff1a;程序员白特&#xff0c;欢迎一起交流学习~ HTTPS是什么 HTTP为什么不安全&#xff1f; https被认为是通信安全的http&#xff0c;除了http多了s和默认端口改成了443之外&#xff0c;其他都是沿用的http&#xff08;除了明文和不安全&#xff09;&#xff0…

自定义类型②③——联合体和枚举

自定义类型②③——联合体和枚举 1.联合体1.1 联合体类型的声明1.2 联合体的特点1.3 相同成员结构体和联合体的对比1.4 联合体大小的计算1.5 联合体的应用①1.5 联合体的应用② 2. 枚举2.1 枚举类型的声明2.2 枚举类型的特点2.3 枚举的优点 1.联合体 1.1 联合体类型的声明 关…

创造未来知识管理新篇章:Ollama与AnythingLLM联手打造个人与企业的安全知识库!

一 Ollama 1.1 简介 Ollama是一个开源的大型语言模型服务工具,它帮助用户快速在本地运行大模型。通过简单的安装指令,用户可以执行一条命令就在本地运行开源大型语言模型,如Llama 2。Ollama极大地简化了在Docker容器内部署和管理LLM的过程,使得用户能够快速地在本地运行大…

【driver1】内核模块,设备号,字符驱动

文章目录 1.内核模块&#xff1a;必须包含module.h2.内核模块参数&#xff1a;权限位S_IRUGO是用在sysfs文件系统里2.1 extern&#xff1a;声明来自另一个模块 3.设备号&#xff1a;主设备号对应驱动程序&#xff0c;具有相同主设备号设备使用相同驱动程序&#xff0c;次设备号…

JUC基础概念

文章目录 JUC的基础概念什么是JUC进程与线程并行与并发线程的五种状态JUC的架构 JUC的基础概念 什么是JUC JUC 是 Java.utils.concurrent 包内的类&#xff0c;是为了开发者可以在多线程的情况下减少竞争条件和防止死锁而出现的。 进程与线程 进程&#xff1a;一个进程包含…

C语言(操作符)2

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸各位能阅读我的文章&#xff0c;诚请评论指点&#xff0c;关注收藏&#xff0c;欢迎欢迎~~ &#x1f4a5;个人主页&#xff1a;小羊在奋斗 &#x1f4a5;所属专栏&#xff1a;C语言 本系列文章为个人学习笔记&#x…

毕业设计uniapp+vue有机农产品商城系统 销售统计图 微信小程序

本人在网上找了一下这方面的数据发现农村中的信心普及率很是低农民们都不是怎么会用手机顶多就是打打电话发发短信&#xff0c;平时不太会上网更不会想到通过网络手段去卖出自己的劳作成果—农产品&#xff0c;这无疑大大浪费了农民的劳动成果和国家资源也大大打击了人们的生产…

csrf攻击(跨站请求伪造)【2】

1.DVWA中csrf漏洞验证low &#xff08;1&#xff09;受害者将密码更改为password&#xff0c;显示更改成功 (2)受害者未退出登录状态&#xff0c;打开了新链接(黑客设计好的修改密码为admin123(原本为passwrod)的链接&#xff09;&#xff0c;导致受害者密码被更改&#xff0c…

安卓动态加载view

目录 前言一、addview1.1 addView 的重载方法1.2 在 LinearLayout 中的使用1.2.1 addView(View child)方法的分析&#xff1a;1.2.2 addView(View child, int index)方法的分析&#xff1a;1.2.3 小结 1.3 在 RelativeLayout 中的使用 二、addContentview2.1 测试 12.2 测试 22…

天擎V6 u盘管控 拒绝访问

故障现象&#xff1a; &#xff08;1&#xff09;客户PC安装了天擎V6客户端&#xff0c;并使用了移动存储-U盘管控的功能。 &#xff08;2&#xff09;策略采用标签授权给u盘读写权限。 &#xff08;3&#xff09;指纹U盘正常注册后&#xff0c;无法正常使用&#xff0c;退出天…

“先锋”西凤

执笔 | 文 清 编辑 | 古利特 制曲是酿酒的第一道工序&#xff0c;也是中国酿酒史上的一大创新&#xff0c;对白酒风味的影响至关重要。西凤酿酒人坚信“曲是酒之骨”&#xff0c;“曲”的品质决定酒的“骨气”&#xff0c;“酒曲”是酒体形成主题风味的基本定型元素和催化剂…

如何使用IntelliJ IDEA SSH连接本地Linux服务器远程开发

文章目录 1. 检查Linux SSH服务2. 本地连接测试3. Linux 安装Cpolar4. 创建远程连接公网地址5. 公网远程连接测试6. 固定连接公网地址7. 固定地址连接测试 本文主要介绍如何在IDEA中设置远程连接服务器开发环境&#xff0c;并结合Cpolar内网穿透工具实现无公网远程连接&#xf…