当前位置: 首页 > news >正文

62. 不同路径

62. 不同路径

一个机器人位于一个 m∗nm * nmn 网格的左上角 (起始点在下图中标记为 “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∗1092 * 10^92109

思路:(动态规划)

由于每次只能向下或者向右移动,所以到达任意一个位置,不是从上面到达就是从左边到达,从而到达该位置的路径就是这两个方向之和:

  • 定义一个 m*n 矩阵dp,用于存放到达当前位置的所有路径;
  • 第一列和第一行比较特殊,分别只能从上方到达,从左面到达,因此只用一条路,赋值为1;
  • 其余位置要比较从左面,从上面到达,所以动态方程为:dp[i][j] = dp[i-1][j] + dp[i][j-1]

代码:(Java)

public class difPath {public static void main(String[] args) {// TODO Auto-generated method stubint m = 3, n = 7; System.out.println(uniquePaths(m, n));}public static 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 j = 0; j < n; j++) {dp[0][j] = 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) 。(优化:因为我们每次只需要 dp[i-1][j],dp[i][j-1],所以我们只要记录这两个数,所以空间复杂度可以为 :O(1) . )

注:仅供学习参考!

题目来源:力扣。

http://www.lryc.cn/news/25998.html

相关文章:

  • 在windows安装python3.11同时进行一个数据的练习
  • Java接口专题
  • 6招优化WordPress打开速度-让你的网站飞起来
  • 春天到了,来一场 VoxEdit 创作大赛吧!
  • 异步Buck和同步Buck的特点
  • 基于轻量级YOLO开发构建中国象棋目标检测识别分析系统
  • 机器学习100天(三十五):035 贝叶斯公式
  • 大话数据结构-栈
  • javaFx实现放大镜效果——圆形、矩形、三角形放大镜,拖动调整放大镜大小,设置放大倍数
  • 什么是客户忠诚度?建立忠诚文化的 5 种方法
  • 【ROS2知识】关于colcon编译和ament指定
  • 数据结构: 最小栈
  • STM32之PWM
  • 操作系统(1.1)--引论
  • Spring boot + mybatis-plus 遇到 数据库字段 创建不规范 大驼峰 下划线 导致前端传参数 后端收不到参数 解决方案
  • JavaScript String 字符串对象
  • Lazada如何做好店铺运营?产品定价是关键
  • 空口协议Eapol、802.11 Action、802.11 BAR 和 802.11BA、802.11 Encrypted Data讲解
  • C++类和对象
  • Leetcode.面试题 05.02 二进制数转字符串
  • UDPTCP网络编程
  • 【微信小程序】-- 全局配置 -- tabBar(十七)
  • Cortex-A7中断控制器GIC
  • JavaSE:常用类
  • Element中树形控件在项目中的实际应用
  • kaggle RSNA 比赛过程总结
  • 51单片机入门————LED灯的控制
  • J - 二进制与、平方和(线段树 + 维护区间1的个数)
  • BertTokenizer的使用方法(超详细)
  • 深度学习编译器CINN(3):编译过程中遇到的问题总结