Leetcode刷题详解——不同路径

1. 题目链接:62. 不同路径

2. 题目描述:

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

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

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

示例 1:

img

输入: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(暴力搜索):

由于复杂度太高会超时

算法思路:

  1. 递归含义:给dfs一个使命,给他一个下标,返回从[0,0]位置走到[i,j]位置一共有多少种方法

  2. 函数体:只要知道到达上面位置的方法数以及到达左边位置的方法数,然后累加起来即可

  3. 递归出口:当下标越界的时候返回0;当前位于起点的时候,返回1

请添加图片描述

C++算法代码:

class Solution {
public:
    int uniquePaths(int m, int n) {
        return dfs(m,n);
    }
    int dfs(int i,int j)
    {
        if(i==0||j==0) return 0;
        if(i==1&&j==1) return 1;
        return dfs(i-1,j)+dfs(i,j-1);
    }
};

解法2(记忆化搜索):

算法思路:

  1. 加上一个备忘录
  2. 每次进入递归的时候,去备忘录看看
  3. 每次返回的时候,将结果加入到备忘录里面

请添加图片描述

C++算法代码:

class Solution {
public:
    int uniquePaths(int m, int n) {
        vector<vector<int>> memo(m+1, vector<int>(n+1)); // 创建一个二维数组memo,用于存储已经计算过的路径数
        return dfs(m, n, memo); // 调用深度优先搜索函数dfs,传入参数m、n和memo
    }
    int dfs(int i, int j, vector<vector<int>>& memo) {
        if (memo[i][j] != 0) { // 如果memo[i][j]不为0,说明已经计算过这个位置的路径数,直接返回memo[i][j]
            return memo[i][j];
        } 
        if (i == 0 || j == 0) return 0; // 如果i或j为0,说明已经到达边界,无法继续前进,返回0
        if (i == 1 && j == 1) { // 如果i和j都为1,说明已经到达终点,返回1
            memo[i][j] = 1;
            return 1;
        }
        memo[i][j] = dfs(i - 1, j, memo) + dfs(i, j - 1, memo); // 递归计算从当前位置向上和向左移动的路径数之和,并将结果存储在memo[i][j]中
        return memo[i][j]; // 返回memo[i][j]作为结果
    }
};

解法3(动态规划):

算法思路:

  1. 函数含义->状态表示
  2. 函数体->状态转移方程
  3. 递归出口->初始化

请添加图片描述

C++算法代码:

class Solution {
public:
    int uniquePaths(int m, int n) {
        // 创建一个二维数组dp,大小为(m+1) x (n+1),用于存储每个位置的路径数
        vector<vector<int>> dp(m + 1, vector<int>(n + 1));
        // 初始化起点的路径数为1
        dp[1][1] = 1;
        // 遍历二维数组,计算每个位置的路径数
        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                // 如果当前位置是起点,跳过
                if (i == 1 && j == 1) continue;
                // 当前位置的路径数等于上方位置的路径数加上左方位置的路径数
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
            }
        }
        // 返回终点的路径数
        return dp[m][n];
    }
};

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

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

相关文章

40 _ 初识动态规划:如何巧妙解决“双十一”购物时的凑单问题?

淘宝的“双十一”购物节有各种促销活动,比如“满200元减50元”。假设你女朋友的购物车中有n个(n>100)想买的商品,她希望从里面选几个,在凑够满减条件的前提下,让选出来的商品价格总和最大程度地接近满减条件(200元),这样就可以极大限度地“薅羊毛”。作为程序员的你…

零代码编程:用ChatGPT自动合并多个Word文件

一个文件夹中有多个docx格式的word文档&#xff1a; 想要把它们都合并成一个文件&#xff0c;然后打印&#xff0c;可以在ChatGPT中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个处理word内容的任务&#xff0c;具体步骤如下&#xff1a; 打开文件夹…

WPF 使用.ttf文件中的图标失败

本章讲述问题&#xff1a;WPF 使用.ttf文件中的图标失败&#xff0c;变成白框问题。 在WPF开发过程中&#xff0c;我们需要使用.ttf文件中的图标和文字&#xff0c;但是经常会遇到类似问题&#xff1a;WPF 在XMAL里增加图标字体时没办法实时显示出来只显示一个小方框&#xff0…

DAY57 739. 每日温度 + 496.下一个更大元素 I

739. 每日温度 题目要求&#xff1a; 请根据每日 气温 列表&#xff0c;重新生成一个列表。对应位置的输出为&#xff1a;要想观测到更高的气温&#xff0c;至少需要等待的天数。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 例如&#xff0c;给定一个列…

PVP2 ProVideoPlayer 2.1.6(PVP2多屏幕演示投放软件)

PVP2 ProVideoPlayer2是一款视频播放和管理软件&#xff0c;旨在帮助用户实现多屏幕视频播放和内容管理。它被广泛应用于演出、活动、会议等场合&#xff0c;可以同时播放多个视频、图像和音频文件&#xff0c;并提供强大的控制和管理功能。 PVP2 ProVideoPlayer2具有直观的用…

Leetcode刷题详解——斐波那契数

1. 题目链接&#xff1a;509. 斐波那契数 2. 题目描述&#xff1a; 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1…

【开源】基于Vue和SpringBoot的民宿预定管理系统

项目编号&#xff1a; S 058 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S058&#xff0c;文末获取源码。} 项目编号&#xff1a;S058&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用例设计2.2 功能设计2.2.1 租客角色…

23111707[含文档+PPT+源码等]计算机毕业设计基于javawebmysql的旅游网址前后台-全新项目

文章目录 **软件开发环境及开发工具&#xff1a;****功能介绍&#xff1a;****论文截图&#xff1a;****实现&#xff1a;****代码:** 编程技术交流、源码分享、模板分享、网课教程 &#x1f427;裙&#xff1a;776871563 软件开发环境及开发工具&#xff1a; 前端使用技术&a…

JVM类加载机制详解

JVM类加载运行全过程 运行Math类的main函数&#xff0c;启动程序时&#xff0c;首先需要通过类加载器把类加载到JVM。 package com.cold;public class Math {public int compute() {int a 1;int b 2;int c (a b) * 10;return c;}public static void main(String[] args) …

解决java在idea运行正常,但是打成jar包后中文乱码问题

目录 比如&#xff1a; 打包命令使用utf-8编码&#xff1a; 1.当在idea中编写的程序,运行一切正常.但是当被打成jar包时,执行的程序会中文乱码.产生问题的原因和解决方案是什么呢? 一.问题分析 分别使用idea和jar包形式打印出System中所有的jvm参数---代码如下: public static…

Android Studio Error “Unsupported class file major version 61“---异常信息记录

编译时异常信息 原因及解决办法 问题出在JAVA 17上&#xff0c;并且使用的Gradle JDK是&#xff1a;Android Studio java home版本17.0.1将其更改为&#xff1a;Android Studio默认JDK版本11.0.10 即可解决 操作步骤 1 2 3

代码执行相关函数以及简单例题

代码/命令 执行系列 相关函数 &#xff08;代码注入&#xff09;

【如何学习Python自动化测试】—— 自动化测试环境搭建

1、 自动化测试环境搭建 1.1 为什么选择 Python 什么是python&#xff0c;引用python官方的说法就是“一种解释型的、面向对象、带有励志语义的高级程序设计语言”&#xff0c;对于很多测试人员来说&#xff0c;这段话包含了很多术语&#xff0c;而测试人员大多是希望利用编程…

企业数字化转型的好处?_光点科技

企业数字化转型是当今商业世界中一个至关重要的议题。数字化转型不仅仅意味着采用新技术&#xff0c;而是涉及到企业在文化、运营和客户体验方面的根本变革。那么&#xff0c;企业数字化转型的好处是什么呢&#xff1f; 1.数字化转型可以显著提高企业的运营效率。 通过自动化流…

MySQL数据库——存储过程-游标(介绍-声明游标、打开游标、获取游标记录、关闭游标,案例)

目录 介绍 声明游标 打开游标 获取游标记录 关闭游标 案例 介绍 游标&#xff08;CURSOR&#xff09;是用来存储查询结果集的数据类型 , 在存储过程和函数中可以使用游标对结果集进行循环的处理。 游标的使用包括游标的声明、OPEN、FETCH 和 CLOSE&#xff0c;其语法…

集成环信IM时常见问题及解决——包括消息、群组、推送

一、消息 环信是不支持空会话的&#xff0c;在插入一个会话&#xff0c;一定要给这个会话再插入一条消息&#xff1b; 发送透传消息也就是cmd消息时&#xff0c;value的em_开头的字段为环信内部消息字段&#xff0c;如果使用会出现收不到消息回调的情况&#xff1b; 如果发送…

基于Pytorch的从零开始的目标检测

引言 目标检测是计算机视觉中一个非常流行的任务&#xff0c;在这个任务中&#xff0c;给定一个图像&#xff0c;你预测图像中物体的包围盒(通常是矩形的) &#xff0c;并且识别物体的类型。在这个图像中可能有多个对象&#xff0c;而且现在有各种先进的技术和框架来解决这个问…

硬件开发笔记(十二):RK3568底板电路电源模块和RTC模块原理图分析

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/134429973 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

【机器学习11】强化学习

1 基本概念 一个机器人在环境中会做各种动作&#xff0c; 环境会接收动作&#xff0c; 并引起自身状态的变迁&#xff0c; 同时给机器人以奖励。 机器人的目标就是使用一些策略&#xff0c; 做合适的动作&#xff0c; 最大化自身的收益。 整个场景一般可以描述为一个马尔可夫…

解决更换NodeJs版本后npm -v返回空白

一、问题描述 win11电脑上输入cmd进入控制台&#xff0c;输入 node --version 有正常返回安装的nodejs的版本号 再输入 npm -v 返回空白。正常情况应该是要返回版本号。 二、问题背景 最近准备学习vue&#xff0c;在不久前已经安装了NodeJs和python。运行了好几个开源项…