LeetCode 75 —— 62. 不同路径

news2024/12/22 20:50:40

LeetCode 75 —— 62. 不同路径

一、题目描述:

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

来源:力扣(LeetCode)

链接:https://leetcode.cn/problems/unique-paths

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析:

  1. 这道题考察了什么思想?你的思路是什么?

    面对这道题目我的第一想法是能不能找寻规律,利用排列组合的方法解题,虽然我没有找到哈~但是我看题解有找到规律的:

    image-20221023173536405

    这个规律其实不太好找,不过我们根据第一个m=3,n=2的例子,可以发现,我们到这里可以有向下一步,向右两步,就一定能到达终点。

    然后我又想了动态规划的方法,这道题应该是一道典型的动态规划题目,我们将起点到每一个点的路径设置为到其左边那个点的路径条数加上到其上面那个点的路径条数之和。所以有动态规划转移方程:

    f(x,y) = f(x-1)(y) + f(x)(y-1)
    

    不过需要注意的是,我们要将f(x,0)和f(0,y)的值设置为1。很好就可以理解,确实到他们的路径只有一条!

  2. 做题的时候是不是一次通过的,遇到了什么问题,需要注意什么细节?

    不是一次通过的,注意什么时候用m,什么时候用n。我刚开始在此处有些失误!

  3. 有几种解法,哪种解法时间复杂度最低,哪种解法空间复杂度最低,最优解法是什么?其他人的题解是什么,谁的效率更好一些?用不同语言实现的话,哪个语言速度最快?

    动态规划优化:因为我们每次只记录需要 dp[i-1][j],dp[i][j-1]

    class Solution {
        public int uniquePaths(int m, int n) {
            int[] pre = new int[n];
            int[] cur = new int[n];
            Arrays.fill(pre, 1);
            Arrays.fill(cur,1);
            for (int i = 1; i < m;i++){
                for (int j = 1; j < n; j++){
                    cur[j] = cur[j-1] + pre[j];
                }
                pre = cur.clone();
            }
            return pre[n-1]; 
        }
    }
    
    作者:powcai
    链接:https://leetcode.cn/problems/unique-paths/solution/dong-tai-gui-hua-by-powcai-2/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    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];
        }
    }
    
    作者:powcai
    链接:https://leetcode.cn/problems/unique-paths/solution/dong-tai-gui-hua-by-powcai-2/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    

三、AC 代码:

func uniquePaths(m int, n int) int {
    dp := make([][]int,m)
    for i := range dp{
        dp[i] = make([]int,n)
        dp[i][0] = 1
    }
    for i:=0;i<n;i++{
        dp[0][i] = 1
    }

    for i:=1;i<m;i++{
        for j:=1;j<n;j++{
            dp[i][j] = dp[i-1][j] + dp[i][j-1]
        }
    }
    return dp[m-1][n-1]
}

四、总结:

空间复杂度可以优化到O(n),当然O(2n)的解法上面也介绍了。如果使用组合数学可以使空间复杂度降到O(1),时间复杂度降到O(m)。

image-20221023180742317

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

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

相关文章

Appium之xpath定位详解

目录 一、基础定位 二、contains模糊定位 三、组合定位 四、层级定位 前面也说过appium也是以webdriver为基的&#xff0c;对于元素的定位也基本一致&#xff0c;只是增加一些更适合移动平台的独特方式&#xff0c;下面将着重介绍xpath方法&#xff0c;这应该是UI层元素定位…

前端系列20集-vue3,微信小程序,brew,redis,WebSocket

onShow() {uni.checkSession({success: (data) > {this.getSessionId()},fail: () > {this.getSessionId()}}) }, // 获取用户的手机号 getPhoneNumber(info) {let wxAuth {encryptedData: info.detail.encryptedData,iv: info.detail.iv,sessionId: uni.getStorageSync…

Java反射源码学习之旅 | 京东云技术团队

1 背景 前段时间组内针对“拷贝实例属性是应该用BeanUtils.copyProperties&#xff08;&#xff09;还是MapStruct”这个问题进行了一次激烈的battle。支持MapStruct的同学给出了他嫌弃BeanUtils的理由&#xff1a;因为用了反射&#xff0c;所以慢。 这个理由一下子拉回了我遥…

青岛农商与中电金信鲸Bot RPA的一次紧密合作

260%、350%、313%、400%、1200%&#xff0c;这些都是青岛农商银行近期通过鲸Bot RPA跑出来的各个业务流程的ROI&#xff0c;原来选择合适的RPA真的这么有用&#xff01;青岛农商还亲切地给RPA起了一个昵称&#xff1a;小鑫&#xff0c;从此小鑫就是青岛农商第一位正式的数智员工…

群晖安装、卸载、停用套件

安装套件 点击套件中心 点击所有套件&#xff0c;选中需要安装的套件&#xff0c;店家安装套件&#xff0c;或者试用&#xff0c;等待安装完成即可 卸载套件 点击已安装 点击图标或者文字&#xff0c;注意&#xff1a;不要点打开 点击向下的箭头 点击停用&#xff0c;或者卸载…

puppeteer实现文件下载

puppeteer实现文件下载 puppeteer版本&#xff1a; "puppeteer": "^20.7.3",脚本需要的其他依赖 const axios require(axios); const FormData require(form-data); const fs require(fs);本脚本测试数据网站&#xff1a;https://unsplash.com/photo…

基于Java民宿管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

【机器学习】数据预处理 - 归一化和标准化

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 数据预处理 一、数据预处理API二、准备数据集三、归…

没有u盘,怎么将电脑上的便签文件拷贝到手机上?

在如今数字化的时代&#xff0c;便签软件已经成为我们工作和生活中很重要的一部分&#xff0c;在便签中我们会记录很多重要事项或者重要文件。有时候&#xff0c;我们可能会遇到这样的问题&#xff1a;当我们在电脑便签上保存了一些重要文件&#xff0c;想要将文件拷贝到手机上…

【Redis常见命令】 —— 关于Redis的一点儿知识

&#x1f4a7; 【 R e d i s 常见命令】——关于 R e d i s 的一点儿知识 \color{#FF1493}{【Redis常见命令】 —— 关于Redis的一点儿知识} 【Redis常见命令】——关于Redis的一点儿知识&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f…

Java框架学习(二)SSM体系:Spring、SpringMVC、MybatisPlus

文章目录 SpringIoC控制反转DI 依赖注入BeanBean基础配置namescope Bean实例化方式Bean的生命周期 依赖注入方式依赖自动装配 Mybatis-Plus配置BaseMapper通用Service常用注解TableNameTableId雪花算法 TableFieldTableLogic 条件构造器和常用接口QueryWrapperUpdateWrapper 插…

【数据库原理与实践】知识点归纳(下)

第6章 规范化理论 一、关系模式设计中存在的问题 关系、关系模式、关系数据库、关系数据库的模式 关系模式看作三元组&#xff1a;R < U,F >&#xff0c;当且仅当U上的一个关系r满足F时&#xff0c;r称为关系模式R < U,F >的一个关系 第一范式&#xff08;1NF&…

一步一步学OAK之七:通过OAK相机实现特征跟踪

目录 特征跟踪Setup 1: 创建文件Setup 2: 安装依赖Setup 3: 导入需要的包Setup 4: 定义FeatureTrackerDrawer类定义变量定义onTrackBar方法定义trackFeaturePath方法定义drawFeatures方法定义FeatureTrackerDrawer类的构造函数 Setup 5: 创建pipelineSetup 6: 创建节点创建相机…

Scrapy框架之下载中间件(详解)

目录 Scrapy中下载中间件 概念 方法 process_request(self, request, spider) 参数: process_response(self, request, response, spider) 参数 基本步骤 示例代码 注意 Scrapy 中 Downloader 设置UA 开发UserAgent下载中间件 代码 三方模块 配置模块到Settin…

Redis系列 | 分类树查询功能如何从2s优化到0.1s

大家好&#xff0c;今天我们继续来分享一个在项目开发过程中遇到的实际问题&#xff0c;这里也来梳理并总结一下我们是如何对它进行持续优化的&#xff0c;希望能对大家有所帮助。 分类树查询功能&#xff0c;在各个业务系统中可以说随处可见&#xff0c;特别是在一些电商系统中…

UGUI无线滑动列表

在游戏开发中&#xff0c;经常会遇到需要展示大量数据的情况&#xff0c;例如排行榜、背包等。为了优化显示效果和性能&#xff0c;一个常见的做法是使用无限滑动列表&#xff08;Infinite Scroll View&#xff09;。本文将详细解析如何实现无限滑动列表。 基本原理 无限滑动列…

市电电压双向越限报警保护器电路设计

该报警保护器能在市电电压高于或低于规定值时&#xff0c;进行声光报警&#xff0c;同时自动切断电器电源&#xff0c;保护用电器不被损坏。该装置体积小、功能全、制作简单、实用性强。 一、电路工作原理 电路原理如图 3 所示。 市电电压一路由C3降压&#xff0c;DW稳压&am…

驱动开发:应用DeviceIoContro模板精讲

在笔者上一篇文章《驱动开发&#xff1a;应用DeviceIoContro开发模板》简单为大家介绍了如何使用DeviceIoContro模板快速创建一个驱动开发通信案例&#xff0c;但是该案例过于简单也无法独立加载运行&#xff0c;本章将继续延申这个知识点&#xff0c;通过封装一套标准通用模板…

一、枚举类型——新特性(switch 中的箭头语法)

支持模式匹配 你可以认为模式匹配&#xff08;pattern matching&#xff09;是在 switch 关键字上进行了显著的功能扩充。 它是分成了多个模块、 历经了 Java 的多个版本持续实现的。这保证了每个模块在其他模块加入前都可以安全地运行。最后&#xff0c;所有的模块集中到一起…