法1:动态规划
看了题解
想法:
- “给定一个正整数 n,将其拆分为至少两个正整数的和”。则 n >= 2
- 用数组dp保存整数 1 ~ n 经拆分后的最大乘积(后续需用到dp[1] = 1,比如 3 = 1 + 2)
- 拆分整数 i 时,先将其拆分为 i - j 和 j;最大值在下面几种情况中产生:
- (i - j) * j:即 i - j 和 j 均不再拆分
- dp[i - j] * dp[j]:即 i - j 和 j 均再拆分
- dp[i - j] * j:即只拆分 i - j
- (i - j) * dp[j] :即只拆分 j
- dp[i]:即之前 i 的拆分中的最大乘积
注:第3种情况与第4种情况本质上是一样的,因为j = 1 ~ i - 1,故只要考虑一个即可
/**
* @param {number} n
* @return {number}
*/
var integerBreak = function(n