劍指 Offer 14- I. 剪繩子 JavaScript實現

謝去非發表於2020-09-26

劍指 Offer 14- I. 剪繩子 JavaScript實現

題目描述

給你一根長度為 n 的繩子,請把繩子剪成整數長度的 m 段(m、n都是整數,n>1並且m>1),每段繩子的長度記為 k[0],k[1]…k[m-1] 。請問 k[0]k[1]…*k[m-1] 可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2、3、3的三段,此時得到的最大乘積是18。

var cuttingRope = function(n) {    
    var dp = new Array(n+1).fill(1);//對dp陣列初始化
    for(let i=3 ; i<=n ; i++){//代表繩子長度的範圍
        for(let j=1 ; j<i; j++){//代表切割的範圍
            dp[i] = Math.max(dp[i],j*(i-j),j*dp[i-j]);
        //比較三者中的最大值
        }
    }
        return dp[n];//返回最大值
};

備註:
當對一個數進行分割時,j和i-j是兩部分,j*(i-j)的值也可能是最大的,例如 5 = 2 + 3 ,可知 3的切割因數乘積最大值為2,若不與 2*3 的結果進行比較,那麼將會返回錯誤的值,所以是三項進行比較。

相關文章