AlgoNote 算法通关手册:LeetCode 343 整数拆分——动态规划五步法经典题解
教程文档知识库【免费下载链接】AlgoNote⛽️「算法通关手册」从零开始的「算法与数据结构」学习教程200 道「算法面试热门题目」1000 道「LeetCode 题目解析」持续更新中项目地址https://gitcode.com/gh_mirrors/le/AlgoNote点击查看免费下载导读本文以「算法通关手册」AlgoNote 仓库中 0343. 整数拆分 的官方题解为主体系统讲解这道中等难度动态规划题的完整推导过程从问题建模、状态定义到状态转移方程与代码实现。该题同时被仓库收录于「无串线性 DP」专题是学习线性动态规划最典型的入门题目之一。读完本文你将掌握整数拆分求最大乘积这一经典 DP 模型的五步解题套路并能直接复现可运行代码。一、题目概览题目链接0343. 整数拆分 - 力扣在 AlgoNote 的分类体系中该题位于 0300-0399 题解目录标签为数学、动态规划难度为中等。在 00_06_categories_list.md 中它被收录进「无串线性 DP 问题」专题列表与「两个键的键盘」「丑数 II」「完全平方数」等经典题并列。题目描述给定一个正整数 $n$将其拆分为 $k (k \ge 2)$ 个正整数的和并使这些整数的乘积最大化。要求返回可以获得的最大乘积。关键约束$2 \le n \le 58$。由于 $n$ 最大仅为 58乘积结果完全在 32 位整数范围内无需考虑大数溢出问题。示例示例 1输入: n 2 输出: 1 解释: 2 1 1, 1 × 1 1。示例 2输入: n 10 输出: 36 解释: 10 3 3 4, 3 × 3 × 4 36。注意题目对拆分方式的隐含要求必须拆成至少 2 个正整数$k \ge 2$因此 $n 2$ 时只能拆成 $1 1$最大乘积为 1而不是不拆分得到的 2。二、为什么这道题适合用动态规划在深入推导前先对照仓库中 08_01_dynamic_programming_basic.md 总结的动态规划三大特征来检验本题最优子结构整数 $i$ 拆分的最大乘积可以由更小整数 $i - j$ 拆分的最大乘积递推得到——整体最优解包含子问题最优解。重叠子问题在枚举第一个拆分项 $j$ 的过程中同一个较小的数如 $dp[i-j]$会被反复计算天然存在大量重叠子问题。无后效性一旦 $dp[i]$ 确定后续阶段不再修改它只依赖前面已经算好的阶段值。三个特征全部满足这正是教科书级的一维线性 DP 模型。在仓库的 08_05_linear_dp_03.md 中本题被选作「无串线性 DP 问题经典例题」第 4.1 节紧接其后的是同类经典题「0650. 只有两个键的键盘」两者共享按正整数递推、枚举拆分/因子的解题框架适合对照学习。三、动态规划五步法完整推导本仓库的题解遵循标准的 DP 五步法阶段划分 → 定义状态 → 状态转移 → 初始条件 → 最终结果。下面逐步拆解。3.1 阶段划分按照正整数进行划分。从小到大依次求解 $i 0, 1, 2, \dots, n$ 每个整数对应的问题前一个阶段求解完成后才进入后一个阶段。3.2 定义状态定义状态 $dp[i]$ 表示将正整数 $i$ 拆分为至少 2 个正整数的和之后这些正整数的最大乘积。这里的状态定义是整个解法的核心$dp[i]$ 描述的是拆分后的最大乘积它天然隐含了必须拆分这一约束从而在递推中自动满足题目 $k \ge 2$ 的要求。3.3 状态转移方程当 $i \ge 2$ 时假设正整数 $i$ 拆分出的第 1 个正整数是 $j(1 \le j i)$则剩余部分为 $i - j$此时有两种策略不再继续拆分将 $i$ 拆分为 $j$ 和 $i - j$ 的和$i - j$ 不再拆分乘积为 $j \times (i - j)$继续递归拆分将 $i$ 拆分为 $j$ 和 $i - j$ 的和且 $i - j$ 继续拆分为多个正整数此时乘积为 $j \times dp[i - j]$直接复用子问题最优解。$dp[i]$ 取两者中的最大值。由于 $1 \le j i$需要遍历所有可能的 $j$因此完整的转移方程为$$ dp[i] \max_{1 \le j i}\lbrace \max(j \times (i - j),\ j \times dp[i - j]) \rbrace $$直观理解枚举第一个拆出来的数 $j$ 的所有可能取值对每个 $j$ 比较剩下不再拆与剩下继续拆两种方案的乘积取全局最大值。$dp[i - j]$ 的复用正是动态规划避免重复计算的关键。3.4 初始条件$dp[0] 0$、$dp[1] 0$$0$ 和 $1$ 都不能被拆分为至少两个正整数无法产生有效拆分故其最大乘积记为 0。3.5 最终结果根据状态定义将正整数 $n$ 拆分为至少 2 个正整数之和后得到的最大乘积即为 $dp[n]$直接返回该值。四、代码实现可运行class Solution: def integerBreak(self, n: int) - int: dp [0 for _ in range(n 1)] for i in range(2, n 1): for j in range(i): dp[i] max(dp[i], (i - j) * j, dp[i - j] * j) return dp[n]代码要点注释dp [0 for _ in range(n 1)]初始化长度为 $n 1$ 的一维表格下标 01 自动满足初始条件 $dp[0] dp[1] 0$外层循环for i in range(2, n 1)按阶段从小到大递推每个整数内层循环for j in range(i)枚举第 1 个拆分项 $j$覆盖 $1 \le j i$ 的全部取值$j 0$ 时(i - j) * j 0、dp[i - j] * j 0不影响取最大值的结果可看作无害的边界遍历max(dp[i], (i - j) * j, dp[i - j] * j)一行同时比较三种情况——当前已记录的最优值、不再拆分方案、继续拆分方案实现状态转移方程。该实现与仓库 08_05_linear_dp_03.md 第 4.1 节中的代码完全一致可直接复制到力扣对应题目中运行。五、复杂度分析时间复杂度$O(n^2)$。外层循环遍历 $n$ 个阶段$O(n)$内层对每个 $i$ 枚举 $j$合计约 $O(n^2)$ 次比较总体为平方级空间复杂度$O(n)$。仅使用长度为 $n 1$ 的一维数组保存状态。结合题目约束 $2 \le n \le 58$$O(n^2)$ 的时间开销对最大规模也完全可接受这正是题目刻意控制 $n$ 上限的原因。六、从仓库结构看本题的定位与延伸6.1 仓库中的多重收录本题在 AlgoNote 仓库中出现于多处形成题解 专题 分类的完整学习闭环位置作用题解文档本题的独立完整题解即本文主体08_05_linear_dp_03.md「无串线性 DP」章节的经典例题4.1 节08_14_counting_dp.md计数 DP 章节 2.2 节亦收录了本题的完整推导00_06_categories_list.md分类刷题列表「无串线性 DP 问题」表格这种专题讲解 分类索引的双重结构体现了仓库按专题分类刷题的编排思路见 00_04_leetcode_guide.md 3.3.3 节。6.2 同类题目延伸练习掌握本题的按正整数递推 枚举拆分/因子框架后可顺藤摸瓜练习仓库中的以下相关题目0650. 只有两个键的键盘同属无串线性 DP但改为枚举因子、求最小操作次数是本题最大化乘积的对偶问题对比练习可加深对状态设计的理解0279. 完全平方数同样在一维 DP 中枚举拆分项完全平方数感受不同枚举维度对转移方程的影响0264. 丑数 II同一专题列表中的进阶题可检验对 DP 递推顺序的掌握程度。6.3 从数学标签看另一种视角题目标签同时包含数学说明除了 DP 还有数学规律解法直观上为使乘积最大应尽量少拆出 1并优先拆分出 3当 $n$ 足够大时$3 \times (n - 3) \ge n$且 3 比 2 更划算。不过仓库题解以动态规划作为主要讲解方案因其通用性更强——数学规律依赖具体数值特性而 DP 五步法可迁移到大量同类问题上这也是本题被选作线性 DP 经典例题的原因。七、小结通过「整数拆分」这道题我们可以完整走一遍动态规划的标准流程划分子问题阶段 → 定义拆分后最大乘积的状态 → 枚举首个拆分项并比较拆/不拆两条转移路径 → 初始化不可拆的边界 → 递推得到 $dp[n]$。这五个步骤在 AlgoNote 仓库中均有完整文字与代码佐证且该模型可以直接复用到完全平方数、丑数、两个键的键盘等一维线性 DP 题目中。建议结合 08_01_dynamic_programming_basic.md 先理解最优子结构、重叠子问题与无后效性三大特征再回到本题反复推演即可把会做一题升级为掌握一类。赞分享教程文档知识库【免费下载链接】AlgoNote⛽️「算法通关手册」从零开始的「算法与数据结构」学习教程200 道「算法面试热门题目」1000 道「LeetCode 题目解析」持续更新中项目地址https://gitcode.com/gh_mirrors/le/AlgoNote点击查看免费下载相关推荐丑数 IILeetCode 0264动态规划 三指针解法精讲AlgoNote 算法通关手册题解丑数 IILeetCode 0264动态规划 三指针解法精讲AlgoNote 算法通关手册题解 本篇技术指南围绕 LeetCode 0264「丑数 I教程文档知识库AlgoNote「算法通关手册」题解精讲LeetCode 0091 解码方法字符串 动态规划AlgoNote「算法通关手册」题解精讲LeetCode 0091 解码方法字符串 动态规划 导读 本篇是 AlgoNote算法通关手册中 009教程文档知识库AlgoNote 算法题解精讲LeetCode 0139「单词拆分」动态规划解法AlgoNote 算法题解精讲LeetCode 0139「单词拆分」动态规划解法 本文基于 AlgoNote 算法通关手册仓库中的 word break.md教程文档知识库上一篇2025黑苹果完整指南从零开始打造稳定macOS系统的终极方案下一篇如何通过EverythingToolbar实现Windows任务栏闪电级文件搜索创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

MFC FTP客户端实战:从CInternetSession连接到文件传输避坑

MFC FTP客户端实战:从CInternetSession连接到文件传输避坑

简介:这是一份基于微软基础类库开发的文件传输协议客户端项目压缩包,面向初学者,帮助理解在视窗环境下利用类库实现网络文件交换的基本流程。压缩包共二十八份文件,整体约一点八三兆字节,除了源程序头文件与实现文件、…

2026/10/11 4:12:24 阅读更多 →
90DaysOfDevOps 第 41 天:开源贡献工作流实战——从 Fork 到 Pull Request 的完整指南

90DaysOfDevOps 第 41 天:开源贡献工作流实战——从 Fork 到 Pull Request 的完整指南

文档/教程 【免费下载链接】90DaysOfDevOps This repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Pri…

2026/10/10 10:18:29 阅读更多 →
Loop Engineering:用Claude Code、Codex、Cursor构建AI编程循环

Loop Engineering:用Claude Code、Codex、Cursor构建AI编程循环

1. 从“写代码”到“设计循环”:Loop Engineering 到底在解决什么问题大多数人第一次接触 AI 编程,脑子里想的都是“我描述一个需求,它给我吐一段代码”。这个心智模型在 2023 年还算够用,但到了 Claude Code、Codex、Cursor 这类…

2026/10/13 10:07:39 阅读更多 →

最新新闻

SpringBoot+Vue+MySQL党员学习交流平台毕业设计全解析

SpringBoot+Vue+MySQL党员学习交流平台毕业设计全解析

做毕业设计选课题,很多人第一反应是找个"看起来简单"的题目。但真正踩过坑的人都知道,技术栈主流、业务场景明确、功能边界清晰的题目才是最省心的。这个"SpringBootVueMySQL 党员学习交流平台"就是比较典型的三年制/四年制计算机毕…

2026/10/13 11:44:21 阅读更多 →
统一大模型API接入:用litellm搭建模型网关的实战指南

统一大模型API接入:用litellm搭建模型网关的实战指南

最近在做 AI 应用的时候,被各家大模型 API 的差异折腾得够呛。同一个功能,OpenAI 的调用方式和 Anthropic 不一样,换到本地模型又是另一套参数,代码里到处都是 if-else 分支,维护起来非常痛苦。后来我在一个开源社区里…

2026/10/13 11:44:21 阅读更多 →
基于PHP开发学生管理系统Web网站:从环境搭建到部署实战

基于PHP开发学生管理系统Web网站:从环境搭建到部署实战

简介:一套基于PHP构建的学生管理系统Web网站源码,面向教育机构、教师以及初中级PHP开发者,主要解决学生档案、课程、专业和管理员信息的高效维护问题。系统采用PHPMySQL实现数据存取,前端由HTML、CSS、JavaScript构成,…

2026/10/13 11:44:21 阅读更多 →
多变量线性回归实战:特征工程、梯度下降与调参避坑指南

多变量线性回归实战:特征工程、梯度下降与调参避坑指南

1. 从单变量到多变量:为什么房价预测不能只看面积 很多人学完单变量线性回归之后,都会有一种“我好像已经会了”的错觉。毕竟公式简单,梯度下降跑一跑,画条直线拟合数据,看起来挺像那么回事。但真正拿到一个稍微贴近现…

2026/10/13 11:44:21 阅读更多 →
微信小程序+Spring Boot+UniApp的大学生兼职推荐系统全栈开发

微信小程序+Spring Boot+UniApp的大学生兼职推荐系统全栈开发

微信小程序 springboot uniapp 的大学生兼职推荐系统,这个题目我盯了很久。说实话,大学生兼职类小程序市面上已经有不少,但真正把"推荐"两个字做扎实的并不多。多数产品就是做了一个职位列表加搜索,用户来了自己翻&am…

2026/10/13 11:44:21 阅读更多 →
蒙特卡洛VaR实战:交易员可用的风险温度计

蒙特卡洛VaR实战:交易员可用的风险温度计

1. 这不是数学考试,是给交易员用的“风险温度计”你手头有一笔股票组合,明天开盘前想快速知道:如果市场突然变脸,最坏可能亏多少?不是拍脑袋猜,也不是等收盘后看报表——而是现在、立刻、用一台普通笔记本&…

2026/10/13 11:43:20 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →