不同路径- java

news2025/1/15 9:59:40
  • 题目描述:

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

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

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

  •   

  • 解题思想:

    • 动态规划:

      • 动态规划是一种将复杂问题分解成更小的子问题并存储子问题解决方案的方法。在这个问题中,我们通过计算从起始点到每个位置的不同路径数目来解决问题。

      • 具体来说,我们定义一个二维数组 dp,其中 dp[i][j] 表示从起始点到达网格的位置 (i, j) 的不同路径数目。我们首先初始化第一行和第一列,因为在这些位置上,机器人只能向右或向下移动,所以到达这些位置的路径数都是1。然后,对于其余的位置 (i, j),到达它的路径数是从上面一格 (i-1, j) 和左边一格 (i, j-1) 的路径数之和,因为机器人只能向下或向右移动。最后,返回 dp[m-1][n-1],即到达右下角的路径数。

      • 这种方法的时间复杂度是 O(m * n),空间复杂度也是 O(m * n),因为我们需要一个二维数组来存储不同位置的路径数目。

    • 解题步骤:

      • 1.  定义一个二维数组 cur
      • 其中 cur[i][j] 表示从起始点到达网格的位置 (i, j) 的不同路径数目。 初始化第一行和第一列,因为在这些位置上,机器人只能向右或向下移动,所以到达这些位置的路径数都是1。
        •         int[][] cur = new int[m][n];
                  for (int i = 1; i < m; i++) cur[i][0] = 1; // 第一列元素为 1
                  for (int j = 1; j < n; j++) cur[0][j] = 1; // 第一行元素为 1
      • 2. 遍历二维数组, 
      •  对于其余的位置 (i, j),到达它的路径数是从上面一格 (i-1, j) 和左边一格 (i, j-1) 的路径数之和,因为机器人只能向下或向右移动。

        •         for (int i = 1; i < m; i++) {
                      for (int j = 1; j < n; j++) {
                          cur[i][j] = cur[i - 1][j] + cur[i][j - 1];
                      }
                  }

            

      • 3. 返回最终结果: 
        • ​​​​​​​return cur[m - 1][n - 1];

      • 以下是完整代码:

        • ​​​​​​​
          class Solution {
              public int uniquePaths(int m, int n) {
                  int[][] cur = new int[m][n];
                  for (int i = 0; i < m; i++) cur[i][0] = 1; // 第一列元素为 1
                  for (int j = 0; j < n; j++) cur[0][j] = 1; // 第一行元素为 1
          
                  for (int i = 1; i < m; i++) {
                      for (int j = 1; j < n; j++) {
                          cur[i][j] = cur[i - 1][j] + cur[i][j - 1];
                      }
                  }
                  return cur[m - 1][n - 1];
                  
              }
          }

            

        • 进阶: 

          • ​​​​​​​进一步优化代码, 减少空间分配
          • 不难发现, 我们建立的矩阵, 所有空间只使用了一次, 可以重复利用空间来减小空间复杂度
          • 这里我们不妨利用滚动数组(Rolling Array)来降低空间复杂度。滚动数组是一种优化技巧,用于减少动态规划算法中所需的额外空间。

            • 在代码中,我们可以定义一个长度为 n 的数组 cur,并将其所有元素初始化为1。然后,我们遍历从第二行开始的每一行(i 从1到 m-1)。在每一行的遍历过程中,我们更新数组 cur 中每个元素的值,使其等于其本身加上其左边元素的值。这样,最终 cur[n-1] 中存储的就是到达右下角的路径数目。

            • 这种方法只使用了长度为 n 的数组来存储路径数目,因此空间复杂度为 O(n)。时间复杂度仍然是 O(m * n),因为我们仍然需要遍历整个网格。

          • 下面是代码实现: 

            • ​​​​​​​
              class Solution {
                  public int uniquePaths(int m, int n) {
                      int[] cur = new int[n];
                      Arrays.fill(cur, 1);
              
                      for (int i = 1; i < m; i++) {
                          for (int j = 1; j < n; j++) {
                              cur[j] += cur[j - 1];
                          }
                      }
              
                      return cur[n - 1];
                  }
              }

                

        •                    以上是本篇文章的全部内容, 感想观看.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

模块化编程:AMD 和 CMD 的魅力

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

特定领域软件体系结构

1.DSSA的定义 简单地说&#xff0c;DSSA&#xff08;Domain Specific Software Architecture&#xff09;就是在一个特定应用领域中为一组应用提供组织结构参考的标准软件体系结构。 从功能覆盖的范围的角度有两种理解DSSA中领域的含义的方式&#xff1a; &#xff08;1&#x…

前端三剑客 —— CSS ( 坐标问题 、定位问题和图片居中 )

前期内容回顾&#xff1a; 1.常见样式 text-shadow x轴 y轴 阴影的模糊程度 阴影的颜色 box-shadow border-radio 实现圆角 margin 内边距 padding 外边距 background 2.特殊样式 媒体查询&#xff1a;media 自定义字体&#xff1a;font-face { font-family:自定义名称&#…

【随笔】Git -- 高级命令(中篇)(七)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

BioMedKGs:算法生成医学知识图谱,解决构建和维护工作量巨大问题

BioMedKGs&#xff1a;算法生成医学知识图谱&#xff0c;解决构建和维护工作量巨大问题 提出背景对比传统方法 算法设计3.1 自动化命名实体识别&#xff08;NER&#xff09;3.2 术语发现与清洗3.3 同义词分组形成概念3.4 多语言、机器翻译3.5 语义类型分类3.6 关系提取3.7 数据…

ArcGIS 10.8中文版详细安装教程(附安装包)

ArcGIS 10.8中文版详细安装教程&#xff08;附安装包&#xff09; 关键词&#xff1a;ArcGIS 10.8中文版安装 1.概述 ArcGIS Desktop 10.8中文版是由ESRI公司开发的一款专业的地理信息系统&#xff0c;一套完整的桌面GIS软件套件&#xff0c;它包含ArcMap、ArcCatalog、ArcG…

简约轻量-失信录系统源码

失信录系统-最新骗子收录查询系统源码 首页查询&#xff1a; 举报收录页&#xff1a; 后台管理页&#xff1a; 失信录系统 V1.0.0 更新内容&#xff1a; 1.用户查询,举报功能 2.界面独立开发 3.拥有后台管理功能 4.xss,sql安全过滤 5.平台用户查询 6.用户中心&#xff08;待完…

【C】leetcode力扣—— 141. 环形链表Ⅰ

目录 141. 环形链表 Ⅰ题目解题思路分析暴力求解&#xff1f;&#xff1f;快慢指针 代码 141. 环形链表 Ⅰ 题目链接: https://leetcode.cn/problems/linked-list-cycle/description/ 题目 题目 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某…

相对论中关于光速不变理解的补充

近几个月在物理直播间聊爱因斯坦相对论&#xff0c;发现好多人在理解爱因斯坦相对论关于基本假设&#xff0c;普遍认为光速是不变的&#xff0c;质能方程 中光速的光速不变的&#xff0c;在这里我对这个假设需要做一个补充&#xff0c;他是基于质能方程将光速C 在真是光速变化曲…

基于k8s的高性能综合web服务器搭建

目录 基于k8s的高性能综合web服务器搭建 项目描述&#xff1a; 项目规划图&#xff1a; 项目环境&#xff1a; k8s&#xff0c; docker centos7.9 nginx prometheus grafana flask ansible Jenkins等 1.规划设计整个集群的架构&#xff0c;k8s单master的集群环境&…

的C++奇迹之旅:值和引用的本质效率与性能比较

文章目录 请添加图片描述 [TOC](文章目录) &#x1f4dd;引用# &#x1f320;引用概念**引用**不是新定义一个变量&#xff0c;而是给**已存在变量取了一个别名**&#xff0c;编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用同一块内存空间。>定义&#…

路由器怎么做端口映射?

路由器作为连接网络的关键设备&#xff0c;在家庭和办公网络中扮演着重要的角色。除了将互联网连接到局域网中&#xff0c;路由器还提供了一些常用的功能&#xff0c;其中之一就是端口映射。 什么是路由器端口映射&#xff1f; 在了解路由器端口映射之前&#xff0c;我们先来了…

HarmonyOS NEXT应用开发之@Provide装饰器和\@Consume装饰器:与后代组件双向同步

Provide和Consume&#xff0c;应用于与后代组件的双向数据同步&#xff0c;应用于状态数据在多个层级之间传递的场景。不同于上文提到的父子组件之间通过命名参数机制传递&#xff0c;Provide和Consume摆脱参数传递机制的束缚&#xff0c;实现跨层级传递。 其中Provide装饰的变…

前端三剑客 —— CSS (第六节)

目录 内容回顾&#xff1a; 弹性布局属性介绍 案例演示 商品案例 布局分析 登录案例 网格布局 内容回顾&#xff1a; 变量&#xff1a;定义变量使用 --名称&#xff1a;值&#xff1b; 使用变量&#xff1a; 属性名&#xff1a;var&#xff08;--名称&#xff09;&a…

Flutter 画笔(Paint)、绘制直线(drawLine)

override bool shouldRepaint(CustomPainter oldDelegate) > true; } class MyPainter extends CustomPainter { override void paint(Canvas canvas, Size size) { //画背景 var paint Paint() …isAntiAlias false …strokeWidth30.0 …color Colors.red; c…

多功能知识付费源码下载-实现流量互导多渠道变现(带详细安装教程)

资源变现类产品的许多优势&#xff0c;并剔除了那些无关紧要的元素&#xff0c;使得本产品在运营和变现能力方面实现了质的飞跃。多领域素材资源知识变现营销裂变独立版本。 支持&#xff1a;视频、音频、图文、文档、会员、社群、用户发布、创作分成、任务裂变、流量主、在线…

Cisco Modeling Labs (CML) 2.7 - 网络仿真工具

Cisco Modeling Labs (CML) 2.7 - 网络仿真工具 思科建模实验室 (CML) 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-modeling-labs-2/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 Cisco Modeling Labs 是我们用于网络仿真的首要平台。凭借易…

绿联 安装zfile,创建属于自己的网盘,支持直链分享

绿联 安装zfile&#xff0c;创建属于自己的网盘&#xff0c;支持直链分享 1、镜像 zhaojun1998/zfile:latest ZFile ZFile 是一个适用于个人的在线网盘(列目录)程序&#xff0c;可以将你各个存储类型的存储源&#xff0c;统一到一个网页中查看、预览、维护&#xff0c;再也不用…

音视频开发之旅(81)- 图片视频“黑边”检测与去除

目录 1.“黑边“的场景 2. 二值化--单一颜色边缘的图像 3. canny边缘检测霍夫直线变换--处理负责的边缘图像 4. 性能优化 5. 资料 在页面展示中&#xff0c;如果图片/视频有黑边&#xff0c;比较影响体验&#xff0c;我我们今天实现下对图片/视频进行黑边检测。检测到黑边…

SQL Server维护计划

目录 1.概述 2.启动SQL Server 代理服务 3.制定维护计划 4.验证维护计划 5.删除维护计划 1.概述 此文还是存货哈&#xff01; SQL Server 2008 R2维护计划。 2.启动SQL Server 代理服务 在设置维护计划之前&#xff0c;必须先确保SQL Server 代理服务已启动。启动方法如…