当前位置: 首页 > news >正文

【算法题】62. 不同路径(LeetCode)

【算法题】62. 不同路径(LeetCode)

1.题目

下方是力扣官方题目的地址

62. 不同路径

  • 一个机器人位于一个 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

2.题解

思路一(公式)

机器人无论怎么走到终点,向下向右的步数是固定的,都是向右n-1格,向下m-1格。

所以我们可以使用组合数,一共走m+n-2次,再其中选出m-1次向下走,其余的自然就是向右走了,所以有:

所以有
C ( m + n − 2 , m − 1 ) C(m+n-2,m-1) C(m+n2,m1)
如何计算它呢?

C ( n , k ) = n ! k ! ( n − k ) ! C(n, k) = \frac{n!}{k!(n-k)!} C(n,k)=k!(nk)!n!

所以有:

Python代码

class Solution(object):def uniquePaths(self, m, n):""":type m: int:type n: int:rtype: int"""from math import factorialreturn factorial(m+n-2)//(factorial(m-1)*factorial(n-1))

思路二(深度优先)

我们有深度优先搜索模拟所有情况,然后来个计数器计数

Python代码

class Solution(object):def uniquePaths(self, m, n):""":type m: int:type n: int:rtype: int"""global ansans=0def dfs(d,x,y):             # d 为深度global ansif d==(m+n-2):ans+=1returndirec=[[1,0],[0,1]]     # 向下或者向右for dx,dy in direc:if 0<=x+dx<m and 0<=y+dy<n:dfs(d+1,x+dx,y+dy)dfs(0,0,0)return ans

这种思路好想到,不过显然超时了

在这里插入图片描述

思路三(动态规划)

我们用dp[i][j]表示到达位置(i,j)时的总路径数。

很显然,当i=0或者j=0时,总路径数都是1

先把这些情况预处理了

其他情况遵循状态转移方程:

dp[i][j]=dp[i-1][j]+dp[i][j-1]

即当前位置的总数是它上方和左方总数之和

Python代码

class Solution(object):def uniquePaths(self, m, n):""":type m: int:type n: int:rtype: int"""dp=[[0]*n for _ in range(m)]    # 初始化dp数组for i in range(n):dp[0][i]=1                  # 预处理for i in range(m):dp[i][0]=1for i in range(1,m):for j in range(1,n):dp[i][j]=dp[i-1][j]+dp[i][j-1]return dp[-1][-1]

3.结语

本人资历尚浅,发博客主要是记录与学习,欢迎大佬们批评指教!大家也可以在评论区多多交流,相互学习,共同成长。

相关文章:

【算法题】62. 不同路径(LeetCode)

【算法题】62. 不同路径(LeetCode) 1.题目 下方是力扣官方题目的地址 62. 不同路径 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图…...

【VUE】Vue中的data属性为什么是一个函数而不是一个对象

在 Vue.js 中&#xff0c;组件的 data 属性可以是一个对象或者一个函数但通常建议将其设置为函数。这是因为组件可能会被多次使用&#xff0c;如果 data 是一个普通对象&#xff0c;那么该对象会被所有实例共享&#xff0c;导致数据混乱。将 data 设置为一个函数可以保证每个组…...

ddos攻击介绍和排查方法

一、DDoS攻击介绍 DDoS攻击&#xff0c;全称为分布式拒绝服务攻击&#xff08;Distributed Denial of Service Attack&#xff09;&#xff0c;是一种常见的网络攻击手段。它通过利用多个计算机系统向目标服务器、服务或网络发送大量请求&#xff0c;导致目标无法处理正常流量…...

git clone --single-branch 提升效率

git clone --single-branch 是一个Git命令&#xff0c;用于从远程仓库中仅克隆单个分支到本地仓库。这个命令在软件开发中非常有用&#xff0c;尤其是在需要特定分支的代码而无需整个仓库的情况下。 基本用法 git clone --single-branch 命令的基本语法如下&#xff1a; git…...

代码随想录算法训练营第十天|1. 两数之和,第454题.四数相加II

文档讲解&#xff1a;代码随想录 难度&#xff1a;一般嗷~~ 1. 两数之和 力扣题目链接(opens new window) 给定一个整数数组 nums 和一个目标值 target&#xff0c;请你在该数组中找出和为目标值的那 两个 整数&#xff0c;并返回他们的数组下标。 你可以假设每种输入只会对…...

龙迅LT8911EX LVDS转EDP 点屏,大批量出货产品

龙迅LT8911EX描述&#xff1a; Lontium LT8911EX是LVDS到eDP转换器&#xff0c;具有单端口或双端口可配置的LVDS接收器&#xff0c;有1个时钟通道和最多8个数据通道&#xff0c;每个数据通道最大运行1.2Gbps&#xff0c;最大输入带宽为9.6Gbps。转换器将输入LVDS数据去序列化&…...

浅谈Oracle之游标

一、基本介绍 在Oracle数据库中&#xff0c;游标&#xff08;Cursor&#xff09;是一种强大的工具&#xff0c;用于逐行处理查询结果集。然而&#xff0c;游标的使用需要谨慎&#xff0c;因为不当的使用可能会导致性能问题。 二、最佳实践和优化技巧 尽量避免使用游标&#xf…...

基于在线教育系统源码的企业培训平台开发解决方案详解

本篇文章&#xff0c;笔者将详细解析基于在线教育系统源码开发企业培训平台的解决方案&#xff0c;探讨其开发步骤、关键功能模块及技术实现方案。 一、在线教育系统源码的优势 在构建企业培训平台时&#xff0c;选择基于在线教育系统源码的开发方式具有以下几个显著优势&…...

Whisper 音视频转写

Whisper 音视频转写 API 接口文档 api.py import os import shutil import socket import torch import whisper from moviepy.editor import VideoFileClip import opencc from fastapi import FastAPI, File, UploadFile, Form, HTTPException, Request from fastapi.respons…...

【详尽-实战篇】使用Springboot生成自带logo或者图片的二维码-扫描二维码可以跳转到指定的页面-Zing-core

先上效果图 项目源码&#xff1a;https://download.csdn.net/download/qq_43055855/89891285 源码地址 手机扫描二维码跳转到指定网页 概述 这个项目是一个基于 Java 的二维码生成与解析工具&#xff0c;主要由 QRCodeUtil 和 QRCodeController 两个类组成。它利用了 Google…...

vue跨标签页通信(或跨窗口)详细教程

在 Vue 应用中,跨标签页(或跨窗口)的通信通常涉及到两个或多个浏览器标签页之间的信息共享。由于每个标签页或窗口都是独立的 JavaScript 执行环境,它们不能直接通过 Vue 或其他 JavaScript 库来直接相互通信。但是,有一些方法可以实现这种跨标签页的通信,主要依靠浏览器…...

【VUE】Vue3通过数组下标更改数组视图为什么会更新?

在 Vue 3 中&#xff0c;使用 Proxy 来实现了对数组的响应式监听&#xff0c;相比于 Vue 2 使用的 Object.defineProperty()&#xff0c;Proxy 更加高效和灵活。 因此&#xff0c;在 Vue 3 中&#xff0c;通过数组下标直接更改数组中某一项的值&#xff0c;也能够被 Vue 正确监…...

前端转换double数据,保留两位小数

Number Number(1.00) 1 Number(1.10) 1.1 Number(1.101) 1.101 要想前端展示页面按 1.00展示1&#xff0c;1.10 展示1.1 需要套一个number() 1.1 保留两位小数&#xff0c;并三位一个分隔符 indexView.value[key] formatNumber(indexView.value[key].toFixed(2))//格式…...

【实战案例】JSR303统一校验与SpringBoot项目的整合

前后端分离项目中&#xff0c;当前前端请求后端接口的时候通常需要传输参数&#xff0c;对于参数的校验应该在哪一步进行校验&#xff1f;Controller中还是Service中&#xff1f;答案是都需要校验&#xff0c;只不过负责的板块不一样&#xff0c;Controller中通常校验请求参数的…...

忘记了系统root密码,如何重置root密码?

重置root密码&#xff08;CentOS7&#xff09; 文章目录 重置root密码&#xff08;CentOS7&#xff09;[toc] 1.开启系统时&#xff0c;在引导界面按下字母e。 2.进入到内核界面&#xff0c;找到Linux开头字样一行&#xff0c;然后在最末尾输入参数rd.break&#xff0c;然后按住…...

7-基于国产化FT-M6678+JFM7K325T的6U CPCI信号处理卡

一、板卡概述 本板卡系我公司自主研发&#xff0c;基于6U CPCI的通用高性能信号处理平台。板卡采用一片国产8核DSP FT-C6678和一片国产FPGA JFM7K325T-2FFG900作为主处理器。为您提供了丰富的运算资源。如下图所示&#xff1a; 二、设计参考标准 ● PCIMG 2.0 R3.0 CompactP…...

计算机毕业设计 | SSM超市进销存管理系统(附源码)

1&#xff0c;绪论 1.1 开发背景 世界上第一个购物中心诞生于美国纽约&#xff0c;外国人迈克尔库伦开设了第一家合作商店&#xff0c;为了更好地吸引大量客流量&#xff0c;迈克尔库伦精心设计了低价策略&#xff0c;通过大量进货把商品价格压低&#xff0c;通过商店一次性集…...

手撕数据结构 —— 堆(C语言讲解)

目录 1.堆的认识 什么是堆 堆的性质 2.堆的存储 3.堆的实现 Heap.h中接口总览 具体实现 堆结构的定义 初始化堆 销毁堆 堆的插入 堆的向上调整算法 堆的插入的实现 堆的删除 堆的向下调整算法 堆的删除的实现 使用数组初始化堆 获取堆顶元素 获取堆中的数据…...

TS和JS中,string与String的区别

1. string string 是 TypeScript 的基本类型&#xff0c;用于表示简单的字符串值&#xff0c;同时它是一个原始类型&#xff0c;可直接表示文本数据。 2. String String 是 JavaScript 中的一个全局对象&#xff08;类&#xff09;&#xff0c;用于创建字符串对象&#xff0…...

jna调用c++动态库linux测试

1、 编译代码和运行指令 javac -cp .:jna-5.7.0.jar:jna-platform-5.7.0.jar JnaTest.java VideoAiLibrary.java java -cp .:jna-5.7.0.jar:jna-platform-5.7.0.jar JnaTest javac -cp .:jna-5.7.0.jar:jna-platform-5.7.0.jar JnaTest.java VideoAiLibrary.java -cp 指定c…...

SwitchyOmega+Burp无感抓包实战:解决HTTPS拦截与流量路由难题

1. 为什么“无感抓包”是BurpSuite日常使用的分水岭刚接触Web安全测试的朋友常有个错觉&#xff1a;装上Burp Suite&#xff0c;配好代理&#xff0c;打开浏览器&#xff0c;点几下网页——流量就该自动进来了。结果现实是&#xff1a;首页打不开、登录态丢失、HTTPS报错满屏、…...

智能检索新范式,让AIAgent自主决策,提升RAG效率100%!

市面上的 RAG 系统&#xff0c;不管叫什么名字&#xff0c;本质上只有两种做法&#xff1a; 第一种&#xff0c;一次性检索。把用户的 query 向量化&#xff0c;从语料库里捞出 Top-K 个文档片段&#xff0c;拼成一个大 prompt 塞给模型。GraphRAG、HippoRAG、LightRAG 都属于…...

从Gamma函数到泊松分布:一个概率论中的含参量积分实用案例解析

Gamma函数与泊松分布&#xff1a;概率论中的数学之美 在数据科学和机器学习的实践中&#xff0c;概率分布构成了建模的基石。当我们深入探究这些分布背后的数学原理时&#xff0c;Gamma函数以其优雅的性质和广泛的应用脱颖而出。它不仅连接了离散与连续概率世界&#xff0c;更在…...

潮州东方轻奢风全屋高定找哪家

开篇引言根据《2026年中国全屋定制行业发展报告》&#xff0c;潮州市全屋定制市场规模同比增长38%&#xff0c;其中全屋高端定制细分市场同比增长52%。目前&#xff0c;潮州市家庭全屋定制需求占比72%&#xff0c;高端定制需求占比45%。为了帮助潮州市消费者选择合规、靠谱、差…...

别再死记公式了!用Python手写一个卷积层,彻底搞懂CNN里的‘卷’是怎么算的

用Python手写卷积层&#xff1a;从零理解CNN的"卷"运算 当你第一次看到卷积神经网络(CNN)的数学公式时&#xff0c;那些复杂的符号和下标是否让你望而却步&#xff1f;作为计算机视觉领域的基石&#xff0c;CNN的核心在于理解卷积运算的本质。本文将带你用NumPy从零实…...

别再只比参数了!从插件生态到中文优化,聊聊ChatGPT和文心一言的“隐形”差异

超越参数之争&#xff1a;ChatGPT与文心一言的生态与本土化实战解析 当技术评测文章还在反复比较模型参数量与发布时间时&#xff0c;真正影响日常工作效率的往往是那些未被量化的"软实力"。本文将从插件生态构建与中文场景优化两个维度&#xff0c;带您重新认识这两…...

猫抓浏览器扩展终极指南:5分钟掌握全网视频资源下载技巧

猫抓浏览器扩展终极指南&#xff1a;5分钟掌握全网视频资源下载技巧 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否经常遇到心仪的视频无法…...

别让依赖毁了你的实验:记一次Vision Mamba复现中causal_conv1d与mamba-ssm的版本“打架”事件

Vision Mamba复现实战&#xff1a;破解依赖冲突的工程化解决方案在深度学习项目的复现过程中&#xff0c;依赖管理往往是最容易被忽视却又最常导致问题的环节。最近在复现Vision Mamba模型时&#xff0c;我遭遇了一场典型的Python依赖"战争"——causal_conv1d与mamba…...

基于晶体管逻辑的水箱自动控制器设计与实现

1. 项目概述&#xff1a;一个基于晶体管逻辑的自动水箱/湿度灌溉控制器 如果你也像我一样&#xff0c;曾经为家里的花园、阳台植物或者农村老家的储水塔手动开关水泵而烦恼&#xff0c;那么这个项目就是为你准备的。我设计并制作了一个完全自动化的水箱水位控制器&#xff0c;它…...

Unity中实现深度遮挡:LingBot-Depth实战接入与优化

1. 这不是“加个插件就完事”的AR效果——为什么LingBot-Depth在Unity里值得专门写一篇实战教程你肯定见过那种AR应用&#xff1a;虚拟椅子摆在真实地板上&#xff0c;但当你绕到椅子后面&#xff0c;它依然完整显示&#xff0c;完全无视身后那堵真实的墙&#xff1b;或者一只3…...