343. 整数拆分

163 阅读1分钟

343. 整数拆分

  • 2<= n <= 58 题目要求n的范围
  • for (var i = 2; i <= n; i++) { 拆分从i = 2 开始拆分,到i = 3,直到in
  • for (var j = 1; j < i; j++) { 当确定了拆分范围i后,再进一步细分,至少拆一个所以1 <= j < i
  • mid = Math.max(mid, Math.max(j * (i - j), j * dp[i - j]));针对某一次i = k( 2<= k <= n ),拆分方案不同,生成的结果也不同,新初始化mid = 0,在拆分的过程中,会生成新的mid,我们取最大值就行,且还要考虑j * (i - j)j * dp[i - j]最值情况
var integerBreak = function (n) {
    // 2<= n <= 58
    var dp = new Array(n + 1).fill(0);
    for (var i = 2; i <= n; i++) {
        var mid = 0;
        for (var j = 1; j < i; j++) {
            mid = Math.max(mid, Math.max(j * (i - j), j * dp[i - j]));
        }
        dp[i] = mid;
    }
    return dp[n];
};