不同路径- 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; // 第一列元素为 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];
                  }
              }

                

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

页面刚加载的时候显示自己定义的{{***}}然后一闪而过

这时候别用插值表达式语法了&#xff0c;直接用v-text或者v-html就能解决这个问题 但是有个问题&#xff0c;如下图所示&#xff1a; 具体bind使用方式&#xff0c;如下图所示&#xff1a; 但是v-bind也可以进行简写&#xff0c;就是去掉v-bind&#xff0c;直接写&#xff1a…

提高空调压缩机能效的通用方法

压缩机的能效提高主要依靠技术改进而不是大幅度增加材料的消耗&#xff0c;这也是技术经济性最好的节能手段。 1、改进电机效率&#xff0c;电机效率的提高意味着压缩机电效率的提高和压缩机总体效率的提高&#xff1b; 1.1、降低定子铜耗 降低定子绕组中电流通过所产生的铜耗…

Java零基础入门-java8新特性(完结篇)

一、概述 ​上几期&#xff0c;我们是完整的学完了java异常类的学习及实战演示、以及学习了线程进程等基础概念&#xff0c;而这一期&#xff0c;我们要来玩点好的东西&#xff0c;那就是java8&#xff0c;我们都知道java8是自2004年发布java5之后最重要且一次重大的版本更新&a…

【通信原理笔记】【三】模拟信号调制——3.2 双边带抑制载波调制(DSB-SC)

文章目录 前言一、DSB-SC的数学表示二、DSB-SC的相干解调三、DSB-SC的性能评价总结 前言 从这一篇开始我们依次介绍几种模拟信号调制的方法&#xff0c;包括其数学表达式&#xff0c;系统框图、解调方式、性能评价等。 一、DSB-SC的数学表示 将 m ( t ) m(t) m(t)作为已调信号…

《机器学习算法面试宝典》正式发布!

大家好&#xff0c;历时半年的梳理和修改&#xff0c;《机器学习算法面试宝典》&#xff08;以下简称《算法面试宝典》&#xff09;终于可以跟大家见面了。 近年来&#xff0c;很多理科专业学生也纷纷转入算法赛道&#xff0c;特别是最近 ChatGPT 的爆火&#xff0c;推动了AI …

单片机之LED与按键

目录 LED LED灯亮的原理图 LED灯光闪烁 电路设计 keil文件 LED流水灯的实现 keil文件 单片机之按键 键盘的结构 按键消抖 软件消抖 硬件消抖 键盘的分类 独立式键盘 行列式键盘 键盘的识别 独立按键案例 电路图 keil文件 行列式键盘案例 电路图 对应按键…

蓝桥杯:七步诗 ← bfs

【题目来源】https://www.lanqiao.cn/problems/3447/learning/【题目描述】 煮豆燃豆苴&#xff0c;豆在釜中泣。本是同根生&#xff0c;相煎何太急?---曹植 所以&#xff0c;这道题目关乎豆子! 话说赤壁之战结束后&#xff0c;曹操的船舰被刘备烧了&#xff0c;引领军队从华容…

PAC性能开销权衡及优化措施

PAC性能开销&#xff1f;如何进行优化&#xff1f;本博客探讨这些问题。

11.python的字典dict(下) 遍历字典,结构优化

11.python的字典dict(下) 遍历所有的键值对 items()方法是字典的一个内置方法&#xff0c;用于返回字典中所有键值对的视图&#xff08;view&#xff09;。它返回一个可迭代的对象&#xff0c;每个元素都是一个包含键和对应值的元组。 下面用一个例子来说明items()方法的用法…

蓝桥杯单片机速成8-NE555频率测量

一、原理图 NOTE&#xff1a;使用NE555测量频率之前&#xff0c;需要将J3-15(SIGNAL)与J3-16(P34短接) 在使用矩阵键盘的时候也记得把跳冒拔下&#xff0c;因为有公共引脚P34 又是因为他的输出引脚是P34&#xff0c;所以只能用定时器0来作为计数器进行频率测量了 二、代码实现 …

Swing中的FlowLayout/WrapLayout在打横排列时候如何做到置顶对齐

前言 最近在开发swing客户端时候碰到一个棘手的问题&#xff1a; Swing中的FlowLayout/WrapLayout在打横排列时候如何做到置顶对齐如果是vue或者react&#xff0c;一搜百度什么都出来了&#xff0c;swing的话&#xff0c;嗯。。。资料有点少而且大部分是stack overflow上面的…

NASA数据集——1980 年至 2020 年北美 3km分辨率气温(摄氏度)、相对湿度(%)、风速(米/秒)、风向(真北偏角)、总降水量(雨+雪)等数据集

Daily SnowModel Outputs Covering the ABoVE Core Domain, 3-km Resolution, 1980-2020 简介 文件修订日期&#xff1a;2023-01-27 数据集版本: 1 摘要 该数据集提供了 1980 年 9 月 1 日至 2020 年 8 月 31 日期间 3 千米网格上的 SnowModel 每日模拟输出&#xff0c;涵…

AFCI 应用笔记二之数据采集

1. 简介 基于监督学习的神经网络算法需要大量数据作为输入&#xff0c;模型完全由数据驱动&#xff0c;其数据质量是算法有效的必要条件&#xff0c;所以如何高效的采集到数据&#xff0c;以及正确的标注或分析是极其重要的&#xff0c;如果第一步有问题&#xff0c;后续的所有…

反转链表 - LeetCode 热题 23

大家好&#xff01;我是曾续缘&#x1f497; 今天是《LeetCode 热题 100》系列 发车第 23 天 链表第 2 题 ❤️点赞 &#x1f44d; 收藏 ⭐再看&#xff0c;养成习惯 反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#…

STM32串口 DMA 接收不定长数据的一种方法

1.前言 使用串口接收不定长数据时&#xff0c;可以有多种方法&#xff0c;比如最常见的有额外使能一个定时器&#xff0c;在超过定时范围未收到后续的字节时&#xff0c;认为此帧结束&#xff1b;或者利用IDLE中断&#xff0c;当数据空闲时&#xff0c;自动产生中断&#xff1…

一文了解:工业互联网的技术构成,代表性平台。

一、什么是工业互联网 工业互联网是指将传统工业领域与互联网技术相结合&#xff0c;实现设备、系统和人员之间的信息传递和协同工作&#xff0c;以提高生产效率、降低成本和改善产品质量。 二、工业互联网构成 它的构成主要包括以下几个方面&#xff1a; 传感器和物联网设备…

【Linux】网络基础常识{OSI七层模型/ TCP/IP / 端口号 /各种协议}

文章目录 1.网络常识1.0DHCP协议1. 1IP地址/MAC地址/ARP协议是什么&#xff1f;IP/MACARP&#xff1a;IP ⇒ MAC 1.2手机连接wifi的原理 SSID与BSSID手机连接wifiSSID与BSSID 1.3手机如何通过“数据/流量”上网&#xff1f;1.4电脑连接wifi的原理&#xff1f;电脑通过热点上网…

npm install node-sass报错

前言 在使用 node-sass 时&#xff0c;你可能会遇到安装 node-sass 时出现各种错误的情况。在本文中&#xff0c;我们将探讨一些常见的 node-sass 安装错误&#xff0c;以及如何解决它们。 无论你是初学者还是有经验的开发者&#xff0c;本文都将为你提供有用的信息和技巧&…

基于DSP28335的直流伺服电机转速控制

目录 一、设计任务 1.1、任务 1.2系统参数 二、总体设计思路 2.1硬件结构 三、转速或位置测量的计算方法 3.1转速测量方法 3.2具体参数计算 控制算法的选择 4.1PID算法&#xff08;位置式与增量式&#xff09; 4.1.1位置式PID算法 4.1.2增量式PID算法 4.2专家PID算法 五、系统工…

一站式知识库服务平台真的有那么好用吗?看完你就懂了

在快速发展的信息化社会&#xff0c;我们经常会听到“知识就是力量”的这句话&#xff0c;而一个一站式的知识库服务平台就是这样一把“开启力量之门”的钥匙。那么&#xff0c;这把钥匙真的有那么好用吗&#xff1f;让我们一起探讨一下。 首先&#xff0c;“一站式”可能已经解…