【动态规划】【数学方法】Leetcode 343. 整数拆分
---------------🎈🎈343. 整数拆分 题目链接🎈🎈-------------------
解法 动态规划
动规五部曲
✒️确定dp数组以及下标的含义
dp[i] 就是当前数字拆分后得到的最大乘积
✒️确定递推公式⭐️
⭐️拆分出一个数
j来。理解 j 是拆分 i 的第一个整数
dp[i]最大乘积可以由 拆分的两个数j 和(i-j)相乘得到
dp[i]最大乘积也可以由 拆分的三个或以上数j 和 dp[i-j]相乘得到
递推公式:dp[i] = max({dp[i], j × (i-j), j × dp[i-j] })
✒️dp数组初始化
dp[0] dp[1]无法拆分,所以没意义
dp[2] = 1,后面递推从3开始即可
✒️确定遍历顺序
dp[i] 是依靠 dp[i - j]的状态,所以遍历i一定是从前向后遍历,先有dp[i - j]再有dp[i]。
✒️举例推导dp数组
时间复杂度O(N^2)
空间复杂度O(N)
📘代码
class Solution {
public int integerBreak(int n) {

文章介绍了如何使用动态规划解决LeetCode问题343,讨论了拆分整数以获得最大乘积的方法,包括递推公式、dp数组的构建和遍历策略。两种解法分别涉及O(N^2)和O(N)的时间复杂度,以及相应的代码实现。

最低0.47元/天 解锁文章
480

被折叠的 条评论
为什么被折叠?



