不同路径- java

  • 题目描述:

    • 一个机器人位于一个 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; // 第一列元素为 1for (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; // 第一列元素为 1for (int j = 0; j < n; j++) cur[0][j] = 1; // 第一行元素为 1for (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.hqwc.cn/news/593230.html

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

相关文章

[Arduino学习] ESP8266读取DHT11数字温湿度传感器数据

目录 1、传感器介绍 2、接线 3、DHT.h库 1、传感器介绍 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器&#xff0c;是简单环境监测项目的理想选择。 温度分辨率为1C&#xff0c;相对湿度为1&#xff05;。温度范围在0C到50C之间&#xff0c;湿度的测…

2024 抖音欢笑中国年(二):AnnieX互动容器创新玩法解析

本文基于24年抖音春节活动业务背景&#xff0c;介绍了字节跨端容器AnnieX在游戏互动套件上的探索&#xff0c;致力于提升容器在游戏互动场景的优化能力。 业务背景 AnnieX作为字节一方游戏统一容器&#xff0c;服务字节内部电商、直播、UG等跨端场景业务。在字节一方游戏互动场…

软考--软件设计师(软件工程总结1)

目录 1.定义 2.软件生存周期 3.软件过程&#xff08;即软件开发中遵循的一系列可预测的步骤&#xff09; ​编辑4.软件开发模型 5.需求分析&#xff08;软件需求分析&#xff0c;系统需求分析或需求分析工程&#xff09; 6. 需求工程 7.系统设计 8.系统测试 1.定义 软件…

『python爬虫』巨量http代理使用 每天白嫖1000ip(保姆级图文)

目录 注册 实名得到API链接和账密 Python3requests调用Scpay总结 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 注册 实名 注册巨量http 用户概览中领取1000ip,在动态代理中使用.用来测试一下还是不错的 得到AP…

AI编程005/ 逆向生成mysql的建表语句

1/ 通过insert into 语句生成建表语句 有些时候我们能获取到表的insert语句&#xff0c;但是没有表结构。我们可以借助AI工具&#xff0c;让其逆向生成mysql的建表语句。 提示词如下&#xff1a; 根据下面的SQL语句&#xff0c;逆向生存mysql的建表语句&#xff0c;每个字段…

开源模型应用落地-chatglm3-6b模型小试-入门篇(三)

一、前言 刚开始接触AI时&#xff0c;您可能会感到困惑&#xff0c;因为面对众多开源模型的选择&#xff0c;不知道应该选择哪个模型&#xff0c;也不知道如何调用最基本的模型。但是不用担心&#xff0c;我将陪伴您一起逐步入门&#xff0c;解决这些问题。 在信息时代&#xf…

一文掌握线程池实现原理

线程池简介 Java在使用线程执行程序时&#xff0c;需要调用操作系统内核的API创建一个内核线程&#xff0c;操作系统要为线程分配一系列的资源&#xff1b;当该Java线程被终止时&#xff0c;对应的内核线程也会被回收。因此&#xff0c;频繁的创建和销毁线程需要消耗大量资源。…

HarmonyOS(鸿蒙)——单击事件

2.4 实现ClickedListener接口并重写onClick方法 2.5 实现onClick方法中的具体逻辑&#xff0c;以此完成点击事件的相关业务操作 三、测试 3.1 登录远程模拟器 3.2 运行项目 四、精选好文 一、简介 1.1 什么是组件 组件就是文本、按钮、图片等元素的统称 1.2 什么是事件 …

机器学习——卷积的变种

机器学习——卷积的变种 卷积神经网络&#xff08;Convolutional Neural Networks, CNNs&#xff09;是深度学习领域中最重要的技术之一&#xff0c;它在图像处理、语音识别、自然语言处理等领域取得了巨大成功。在CNN中&#xff0c;卷积层是最核心的组成部分之一&#xff0c;…

可以写网易云的了!

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 1枚程序媛&#xff0c;大专生&#xff0c;2年时间从1800到月入过万&#xff0c;工作5年买房。 分享成长心得。 259篇原创内容-gzh 后台回复“前端工具”可获取开发工具&#xff0c;持续更新中…

问题解决:写CSDN博文时图片大小不适应,不清晰,没法排版

项目环境&#xff1a; Window10&#xff0c;Edge123.0.2420.65 问题描述&#xff1a; 当我在CSDN写博文的时候&#xff0c;会经常插入一些图片&#xff0c;但有时候我插入的图片太大了&#xff0c;影响了整体排版。 比如我加入了一张图片&#xff0c;就变成了下面这个样子&…

x86汇编写矩阵乘法问题(实现一个3×3矩阵乘法的汇编代码)

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…