首页 > 编程语言 >Leedcode【62】. 不同路径——Java解法(动态规划)

Leedcode【62】. 不同路径——Java解法(动态规划)

时间:2024-06-20 15:28:35浏览次数:11  
标签:Java 示例 int 复杂度 Leedcode ++ 62 向下 dp

Problem: 62. 不同路径

  1. 题目
  2. 思路
  3. 解题方法
  4. 复杂度
  5. Code
  6. 效果

题目

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

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

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

示例 1:

image.png

输入: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

思路

  • 动态规划
    * 1 确定dp数组及下表的含义
    * dp[i][j] 二维数组,代表从坐标(0,0)到(i,j)有多少种路径
    * 2 确定递推公式
    * 每次只能向下或者向右移动一步
    * dp[i][j] = dp[i-1][j] + dp[i][j-1]
    * 3 dp数组如何初始化
    * 第一行第一列都是只有1条路径
    * 所以 dp[1][j] 和 dp[i][1]都为1
    * 4 确定遍历顺序
    * 一层一层遍历
    * 5 举例推导dp数组

解题方法

动态规划

复杂度

时间复杂度:

O(m × n)

空间复杂度:

O(m × n)

Code

Java

class Solution {
    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 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];
    }
}

效果

image.png

标签:Java,示例,int,复杂度,Leedcode,++,62,向下,dp
From: https://blog.csdn.net/qq_42631788/article/details/139834172

相关文章

  • 在JavaScript中如何获取时间戳?
    在JavaScript中,你可以通过几种方式获取时间戳。最常见的方式是使用Date对象的getTime()方法,这会返回自1970年1月1日00:00:00UTC(世界标准时间)以来的毫秒数。下面是一个简单的例子:javascript//创建一个Date对象,表示当前的时间和日期letnow=newDate();//使用getTime()......
  • 只听过 Python 做爬虫?不瞒你说 Java 也很强
    网络爬虫技术,早在万维网诞生的时候,就已经出现了,今天我们就一起来揭开它神秘的面纱!一、摘要说起网络爬虫,相信大家都不陌生,又俗称网络机器人,指的是程序按照一定的规则,从互联网上抓取网页,然后从中获取有价值的数据,随便在网上搜索一下,排在前面基本都是pyhton教程介绍。的确,pyhto......
  • B6284D 输入2-24V 最高28V输出 1.2MHz首鼎SHOUDING 升压IC
        B6284D是一款固定频率,SOT23-6封装的电流模式升压变换器,高达1.2MHz的工作频率使得外围电感电容可以选择更小的规格。内置软启动功能减小了启动冲击电流。B6284D轻载时自动切换至PFM模式。B6284D包含了输入欠压锁定,电流限制以及过热保护功能。小尺寸的封装给PCB省下更......
  • 学生个人html静态网页制作 基于HTML+CSS+JavaScript+jquery仿苏宁易购官网商城模板
    ......
  • 【java基础】String类的==和equals怎么回事?
    String类是final的,代表不可以被继承了。怎么判断一个类是不是不可变的呢?看里面的成员是不是都用final修饰过了。String里面用byte[]存放字符串的值,而这个value也是final的。就可以认为String是一个不可变的类。Stringobj1=“abc”,那么你再让obj=“bcd”,那么只是让obj指向了一段......
  • JAVA面向对象三大特征————封装
    封装是面向对象的三大特征之一。面向对象的三大特征:封装、继承、多态类=属性+方法,类是对属性和方法的封装。类封装了类的成员。如果在类的外部可以随意访问类的成员,那将属性和方法放到类中就没有意义了。因此Java允许在类中通过访问修饰符控制类成员的访问权限privat......
  • JAVA-面向对象的概念
    面向对象的概念:面向对象编程:OOP(Object-OrientedProgramming)使用类和对象开发程序的基本步骤:对于面向对象编程,主要工作就是编写类。面向对象开发的步骤:l 开发类,类=属性(成员变量)+方法l 通过new关键字创建对象l 使用类中的属性和方法:对象.属性名 对象.方法名()类......
  • 【JavaEE精炼宝库】多线程(7)定时器
    目录一、定时器的概念二、标准库中的定时器三、自己实现一个定时器3.1MyTimerTask实现:3.2MyTimer实现:一、定时器的概念定时器也是软件开发中的⼀个重要组件。类似于一个"闹钟"。达到一个设定的时间之后,就执行某个指定好的代码(可以用来完成线程池里面的非核心线程......
  • Java计算机毕业设计+Vue实习实训管理系统(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今社会,实习实训已成为高等教育中不可或缺的一部分,对于学生实践能力和职业素养的提升具有重要意义。然而,传统的实习实训管理方式存在着诸多不便,如......
  • java中的几个关键字
    在Java编程语言中,以下几个关键字扮演了重要角色,它们分别是this,static,super,Object和final。每个关键字都有其特定的用途和行为,理解这些关键字对于编写高效且可靠的Java代码至关重要。1.this关键字this关键字在Java中用来引用当前对象的实例。它有以下几种主要用途:引用......