LeetCode Hot100(62/100)——62. 不同路径

AI驱动视频剪辑自动化:cutcli命令行工具重塑工作流 视频剪辑自动化是提升内容生产效率的关键技术,其核心原理在于通过程序化指令替代手动操作,将创意执行过程代码化。这项技术的价值在于能够将创作者从重复性劳动中解放,实现批量化、标准化的视频内容生产,尤其适用于社交媒体运营、产品宣传等高频产出场景。通过封装专业软件(如剪映/CapCut)的底层草稿格式,自动化工具在保证工业级渲染质量的同时,提供了可编辑的中间态,为AI智能体(Agent)与生产工具的结合提供了清晰接口。本文以cutcli为例,深入探讨了如何通过命令行工具和AI助手,构建从自然语言指令到可编辑视频草稿 阅读详情

题目理解

我们可以把网格看成一个棋盘:

  • 起点:左上角
  • 终点:右下角
  • 允许动作:向右 或 向下

以 m = 3, n = 7 为例,答案是 28。

一个直观网格示意:

0123456
0S
1
2E

解法总览

不同路径

暴力递归

思路直观

指数级复杂度

记忆化搜索

递归 + 缓存

避免重复子问题

动态规划

二维DP

状态转移清晰

一维DP

空间优化

数学组合

本质是排列组合

复杂度最低


关键状态与转移

定义 f(i, j) 表示从起点走到格子 (i,j) 的路径数。

因为最后一步只能来自:

  • 上方 (i-1, j)(向下走一步到当前)
  • 左方 (i, j-1)(向右走一步到当前)

所以有经典转移方程:

f ( i , j ) = f ( i − 1 , j ) + f ( i , j − 1 ) f(i,j)=f(i-1,j)+f(i,j-1) f(i,j)=f(i−1,j)+f(i,j−1)

边界:

  • 第一行只能一直向右走,所以都是 1
  • 第一列只能一直向下走,所以都是 1

解法一:暴力递归

原理

从终点反推:

  • 到 (i,j) 的路径数 = 到 (i-1,j) + 到 (i,j-1)
  • 递归到边界结束

问题

会重复计算大量子问题(例如 (m-2,n-2) 会被多次计算),时间复杂度指数级,LeetCode 会超时。

Java 代码

class Solution {
    public int uniquePaths(int m, int n) {
        return dfs(m - 1, n - 1);
    }

    private int dfs(int i, int j) {
        if (i < 0 || j < 0) return 0;
        if (i == 0 || j == 0) return 1;
        return dfs(i - 1, j) + dfs(i, j - 1);
    }
}

复杂度

  • 时间复杂度:O(2^(m+n))(近似指数级)
  • 空间复杂度:O(m+n)(递归栈深度)

解法二:记忆化搜索(递归 + 缓存)

原理

在暴力递归基础上,增加一个 memo[i][j]:

  • 若 memo[i][j] 已算过,直接返回
  • 否则递归计算并存储

避免重复子问题后,复杂度降到多项式级别。

时序图

dfs(i,j) Solution 调用方 dfs(i,j) Solution 调用方 uniquePaths(m,n) dfs(m-1,n-1) dfs(i-1,j) dfs(i,j-1) 写入 memo[i][j] 返回 memo[i][j] 返回结果

Java 代码

class Solution {
    private int[][] memo;

    public int uniquePaths(int m, int n) {
        memo = new int[m][n];
        return dfs(m - 1, n - 1);
    }

    private int dfs(int i, int j) {
        if (i < 0 || j < 0) return 0;
        if (i == 0 || j == 0) return 1;
        if (memo[i][j] != 0) return memo[i][j];

        memo[i][j] = dfs(i - 1, j) + dfs(i, j - 1);
        return memo[i][j];
    }
}

复杂度

  • 时间复杂度:O(m*n)
  • 空间复杂度:O(m*n)(memo)+ O(m+n)(递归栈)

解法三:二维动态规划

原理

递归改迭代,按行或按列填表。

  1. 创建 dp[m][n]
  2. 初始化第一行、第一列为 1
  3. 从 (1,1) 开始:
    dp[i][j] = dp[i-1][j] + dp[i][j-1]
  4. 返回 dp[m-1][n-1]

流程图

否

是

开始

创建 dp[m][n]

第一行全部置 1

第一列全部置 1

双重循环 i=1..m-1, j=1..n-1

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

遍历结束?

返回 dp[m-1][n-1]

结束

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];
    }
}

复杂度

  • 时间复杂度:O(m*n)
  • 空间复杂度:O(m*n)

解法四:一维动态规划(空间优化)

原理

观察二维 DP 转移式:

  • dp[i][j] 只依赖当前行左边值 dp[i][j-1]
  • 和上一行同列值 dp[i-1][j]

可以把二维压缩成一维数组 dp[j]:

  • dp[j] 在更新前代表“上一行同列”
  • dp[j-1] 在更新后代表“当前行左侧”

转移:
d p [ j ] = d p [ j ] + d p [ j − 1 ] dp[j] = dp[j] + dp[j-1] dp[j]=dp[j]+dp[j−1]

Java 代码

class Solution {
    public int uniquePaths(int m, int n) {
        int[] dp = new int[n];

        // 第一行全是1
        for (int j = 0; j < n; j++) dp[j] = 1;

        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                dp[j] = dp[j] + dp[j - 1];
            }
        }

        return dp[n - 1];
    }
}

复杂度

  • 时间复杂度:O(m*n)
  • 空间复杂度:O(n)

解法五:数学组合

原理

从起点到终点总共要走:

  • 向下 m-1 步
  • 向右 n-1 步

总步数 m+n-2,本质是从这些步中选哪几步向下(或向右):

ans = C ( m + n − 2 , m − 1 ) = C ( m + n − 2 , n − 1 ) \text{ans} = C(m+n-2, m-1) = C(m+n-2, n-1) ans=C(m+n−2,m−1)=C(m+n−2,n−1)

为什么好

  • 不需要 DP 表
  • 复杂度最低(线性于较小维度)

Java 代码(避免中间溢出)

class Solution {
    public int uniquePaths(int m, int n) {
        int total = m + n - 2;
        int k = Math.min(m - 1, n - 1);

        long ans = 1;
        for (int i = 1; i <= k; i++) {
            ans = ans * (total - k + i) / i;
        }
        return (int) ans;
    }
}

复杂度

  • 时间复杂度:O(min(m,n))
  • 空间复杂度:O(1)

各解法对比

解法时间复杂度空间复杂度说明
暴力递归指数级O(m+n)思路简单,但会超时
记忆化搜索O(m*n)O(m*n)递归写法友好
二维 DPO(m*n)O(m*n)最经典,容易理解
一维 DPO(m*n)O(n)工程上常用优化
数学组合O(min(m,n))O(1)最简洁高效

推荐写法

面试/笔试建议优先:

  1. 二维 DP(解释最直观)
  2. 一维 DP(展示优化能力)
  3. 数学组合(展示抽象能力)
7.DJI-PSDK:psdk负载应用固件升级(基于RTOS) 在单片机应用程序开发阶段,我们可以借助keil5和J-LINK来直接下载应用程序进行开发和调试, 但在产品交付之后,我们对应用程序做了改动和升级,是断然不可能采用这种方式的,我们应该将新版本的程序固件打包发给客户, 能够方便用户通过DJI Assistant2选择更新负载设备的固件,导入本地固件程序包,更新负载设备。使用STM32F4 开发的负载设备从Flash 中直接读取固件文件并运行负载设备程序,因此开发者需先烧录Bootloader 再烧录应用固件,烧录Bootloader 的步骤不再赘述。 阅读详情

相关推荐

树莓派使用 OLED 屏显示图片及文字

树莓派默认是不带显示屏的,如果想要查看系统的一些信息,需要使用电脑登录到树莓派,或者通过 HDMI 连接外接显示器查看。这样做总是有点麻烦,我们可以通过外接一个 OLED 屏来显示一些关键参数或者图片。本文将详细介绍操作方法。 OLED 模组介绍 OLED 屏主要有两种:128×32 和 128×64 ,主要颜色是白、黄、蓝。OLED 屏的特点是功耗低,价格便宜,使用 I2C 接口与主机连接。本文所使用的是 128×64 尺寸的屏幕,外形如下: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直

码到成功 3743

hot100打卡——day20

本文汇总了LeetCode中四个经典算法题的解题思路和代码实现。62题"不同路径"使用动态规划,通过构建二维数组记录到达每个位置的路径数;56题"合并区间"先排序后合并重叠区间;55题"跳跃游戏"采用从后往前遍历的方法判断可达性;53题"最大子数组和"通过动态规划计算以每个元素结尾的子数组最大和。所有题目均给出了完整的Java实现代码和解题思路分析,涵盖了动态规划、贪心算法等常见解题方法。

2301_80275666的博客 399

LLaVA-1.5:多模态视觉问答新突破

LLaVA-1.5在多模态视觉问答(VQA)任务中取得了显著进展,主要得益于视觉-语言连接器的优化和特定任务数据集的增加。通过将连接器升级为两层MLP,模型在处理视觉与语言关系时表现更佳。同时,引入如OKVQA、OCRVQA等数据集,增强了模型在复杂视觉推理任务中的能力。在11个基准测试中,LLaVA-1.5超越了现有方法,展示了其强大的多模态能力。此外,模型通过提升输入图像分辨率、扩展语言模型和改进多语言能力,进一步提升了性能。尽管在短格式回答任务中初期表现不佳,但通过调整提示格式和微调,其性能显著提升

weixin_57060548的博客 945

Leetcode HOT 100 题目总结(已完结)

文章目录前引题目博客链接Easy No.1 - No.21 前引 这段时间感觉动态规划已经做伤了 就是真的没什么动力再做下去了 后面没做的也都是难的不行的dp题目了 想着还是要做的 这段时间换点口味 把力扣HOT 100题给全做了 写个总结 题目博客链接 Easy No.1 - No.21 461. 汉明距离 617. 合并二叉树 104. 二叉树的最大深度 206. 反转链表 169. 多数元素 21. 合并两个有序链表 ...

Love 6's Private Blog 1万+

手把手教你用6轴IMU跑通LIO-SAM:参数配置与代码修改保姆级教程

本文提供了一套完整的6轴IMU适配LIO-SAM的解决方案,包括参数配置与代码修改的详细步骤。从理解6轴与9轴IMU的关键差异入手,逐步指导如何调整核心配置文件params.yaml、重构utility.h关键函数、优化mapOptimization.cpp的位姿融合逻辑,并给出编译验证与性能调优建议,帮助开发者快速实现6轴IMU在LIO-SAM中的稳定运行。

weixin_28717807的博客 357

联想服务器ThinkSystemRAID阵列设置教程

关注我不迷路,全是干货! 以联想ThinkSystemSR530为例子进行示范。 开机点按【F1】 点击——【UEFI设置】 依次点击——【系统设置】——【存储】 点击——【RAID卡】 PS:本次服务器配置的是730-8i 阵列卡,按实际情况选中需要设置的阵列卡即可。 点击——【Main Menu】 点击——【Configuration Management】 点击——【Create Virtual Drive】 点击——【Select RAID Leve..

littlelotusK的博客 2万+

【Leetcode hot 100】62.不同路径

本文介绍了两种求解机器人网格路径问题的方法。动态规划法通过二维或一维DP数组逐步累积路径数,时间复杂度O(mn),空间复杂度可优化至O(min(m,n))。组合数学法利用阶乘公式直接计算组合数,时间复杂度O(min(m,n))且空间O(1),效率最高。推荐优先使用组合数学法,而动态规划有助于理解问题求解思路。两种方法各有优势,可根据实际需求选择。

专注Java和MySQL领域知识分享 1011

ComfyUI破限版全中文AI绘画环境搭建与工作流实战指南

节点式工作流是AI绘画领域的核心技术架构,通过将图像生成过程拆分为可配置的模块化节点,实现了对Stable Diffusion模型的精细化控制。其技术原理基于数据流编程范式,每个节点负责特定功能处理,如文本编码、采样器配置和VAE解码等。这种设计在工程实践中的核心价值在于提供了可追溯、可复用的可视化工作流,特别适合需要参数调优和批量生产的商业场景。ComfyUI作为典型的节点式AI绘画工具,在破限版中针对中文用户优化了界面支持和显卡兼容性,显著降低了技术门槛。在实际应用中,结合ControlNet和LoRA

weixin_29038155的博客 446

力扣hot100

【代码】力扣hot100。

qq_59768361的博客 1400

FlashBootloader01-基于UDS的Flash Bootloader【架构篇】

文章目录1 Flash Bootloader的依赖项2 Flash Bootloader中使用的UDS的主要功能3 Flash Bootloader更新固件3.1 初始化MCU3.2 刷写流程 1 Flash Bootloader的依赖项 通常Flash Bootloader由以下四方面组成: UDS协议 上位机「编写Bootloader Sequence」 通信驱动(如CAN ) Flash Driver 2 Flash Bootloader中使用的UDS的主要功能 1. 10 02服务 客户端

3589

LiveBOS UploadFile.do 任意文件上传漏洞复现(XVE-2023-21708)

LiveBOS UploadFile.do 接口存在任意文件上传漏洞,未经身份验证的攻击者可通过该漏洞在服务器端任意执行代码,写入后门,获取服务器权限,进而控制整个web服务器。

0xSec 2420

最详细,最简单的力扣(leetcode)hot 100 多维动态规划篇讲解

最详细的多维动态规划问题的解决方法。保证看了的都能够学会

yyyCode的博客 2384

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

leetcode HOT100总结

本人菜鸡一枚,历时两个月时间把HOT100题做完(Ctrl C-V)了,做完之后还是感觉到很虚,很多中等题还是不会做,于是乎花几天时间把这100题给总结一下。一方面,对自己的知识梳理;另一方面,便于后续回顾。(完成度99,是因为有一道题目收费,没有做!哈哈哈!)以下所有题目都是用Python3实现的。 下面是对这些题目按照算法进行分类整体,主要包括排序、哈希表、递归\回溯、链表、双指针、动态规划、二分查找、贪心、树、深度优先搜索、广度优先搜索等。 在整理之前,先学习一下Python的基本数据类型有哪些,请

qq_36561737的博客 4744

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【Hot100】LeetCode—62. 不同路径

62. 不同路径。

weixin_44382896的博客 692

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

力扣hot100——回溯

大部分题目是代码随想录已经刷过的题,更多的回溯题可以看之前的博客。

qq_65507629的博客 1718

LeetCode-hot100题解—Day6

LeetCode-hot100题解—Day6

m0_49074706的博客 1406

LeetCode 热题 HOT 100 题解(仅记录解题思路)

由于数组中只有一个元素出现一次,其余元素都出现两次,因此用集合中的元素之和的两倍减去数组中的元素之和,剩下的数就是数组中只出现一次的数字。遍历数组中的每个数字,如果集合中没有该数字,则将该数字加入集合,如果集合中已经有该数字,则将该数字从集合中删除,最后剩下的数字就是只出现一次的数字。指针p1在头结点处,指针p2在头结点的next处,然后p1每次移动1格,p2则走2步,若在其中一个进入null之前两者指向同一结点,则代表有环。使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。

a131529的博客 1万+

【力扣hot100】 62. 不同路径

本文探讨了机器人从m×n网格左上角移动到右下角的不同路径数问题。最初采用DFS递归解法会超时,后改用动态规划方法。通过观察发现状态转移方程dp[i][j]=dp[i-1][j]+dp[i][j-1],即每个格子的路径数等于上方和左方格子路径数之和。初始化首行和首列为1后,逐步填充二维DP表,最终dp[m][n]即为所求。该方法时间复杂度O(mn),空间复杂度O(mn),有效解决了原问题。

prowity的博客 617

LeetCode 热题 HOT 100 Java题解——62. 不同路径

LeetCode 热题 HOT 100 Java题解62. 不同路径组合数复杂度分析 62. 不同路径 题目: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径? 示例: 输入: m = 7, n = 3 输出: 28 组合数 m=7,n=3m=7, n=3m=7,n=3意味着需要向右走6步,向下走2步,一共8步,组合的情况就是8步中选择2

qq_20067165的博客 318

力扣hot100——多维动态规划

多维dp

qq_65507629的博客 1387

Hot 100总结【leetcode】

leetcode hot100总结

weixin_44911248的博客 6639

(LeetCode-Hot100)62. 不同路径

本文介绍了LeetCode 62题"不同路径"的三种解法。题目要求计算机器人从m×n网格左上角到右下角的所有路径数,每次只能向右或向下移动。方法一使用二维动态规划,时间复杂度O(mn),空间复杂度O(mn);方法二优化为一维DP,空间复杂度降至O(n);方法三采用组合数学公式,效率最高。文章通过示例验证了算法正确性,分析了各方法复杂度,并推荐组合数学或一维DP解法。掌握本题对解决更复杂的路径规划问题具有基础意义。

小飞的博客 1038

leetcode hot100【LeetCode 62.不同路径】java实现

LeetCode 62.不同路径-动态规划

DataCrafter的博客 525

力扣 (LeetCode) LeetCode HOT 100

LeetCode-HOT-100力扣 (LeetCode) ????LeetCode 热题 HOT 100 ⚡ ???? 如果你有问题https://webvueblog.github.io/LeetCode-HOT-100/1. 两数之和2. 两数相加3. 无重复字符的最长子串4. 寻找两个正序数组的中位数5. 最长回文子串10. 正则表达式匹配11. 盛最多水的容器15. 三数之和17. 电话号码的字母...

程序员哆啦A梦,蓝胖子 2512

【leetcode hot 100 62】不同路径

【代码】【leetcode hot 100 62】不同路径。

longii11的博客 264

Leetcode 热题HOT 100 62.不同路径

Leetcode 热题HOT 100 62.不同路径目录一、题目二、解析过程1.题目解析2.代码实现总结 目录 一、题目 二、解析过程 1.题目解析 首先拿到这道题时,我想到的第一反应是深度搜索,然后做了很久,结果却是内容运行超时,然后又反过来思考题目,我们会发现机器人的行走只能是“向下”或者“向右”,在一个二维的平面上,对于方格的一个位置(i,j),可以通过“向右”到达——>即前一步所处的位置为(i,j-1),也可以“向下”到达——>即前一步所处的位置为(i-1,j)。其实分析到这里我

qq_51933234的博客 247
上一篇: RAG系统完整流程
下一篇: LeetCode Hot100(63/100)——31. 下一个排列
TracyCoder123
博客等级 码龄8年 1万+粉丝 226原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TracyCoder123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值