343. 整数拆分¶
给定一个正整数 n
,将其拆分为 k
个 正整数 的和( k >= 2
),并使这些整数的乘积最大化。
返回 你可以获得的最大乘积 。
示例 1:
示例 2:
提示:
2 <= n <= 58
个人题解¶
- 确定
dp
数组:dp[i]
代表拆分正整数i
获得的最大乘积; - 确定递推公式:
dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j))
,可以这样理解,(i - j) * j
是把整数i
拆分为i - j
和j
相乘,dp[i - j] * j
相当于把整数i
拆分为j
和dp[i - j]
,而dp[i - j]
代表整数i - j
的若干拆分情况中乘积最大的一种; dp
数组初始化,根据dp
数组定义,dp[0-1]
没有初始化的意义,因为无法拆分,只需要从2
开始拆分即可,即dp[2] = 1
;- 确定遍历顺序:由递推公式,遍历顺序应该为从大到小;
- 举例推导
dp
数组,合理。