Leetcode-343:整數(shù)拆分

題目描述:
給定一個(gè)正整數(shù) n,將其拆分為至少兩個(gè)正整數(shù)的和,并使這些整數(shù)的乘積最大化。 返回你可以獲得的最大乘積。

說(shuō)明: 你可以假設(shè) n 不小于 2 且不大于 58

思路:
一般來(lái)說(shuō),將一個(gè)數(shù)不斷除以2到1為止,得到的數(shù)字乘積是最大的。但是也有特例:比如8的最大值不是44=16,而是32*3=18。所以還是需要從2開(kāi)始遍歷到該數(shù)的一半進(jìn)行判斷。

狀態(tài)轉(zhuǎn)移方程為 dp[i] = Math.max(dp[i], dp[j] * dp[i-j]) (j from 2 to i/2)

class Solution {
    public int integerBreak(int n) {
        if(n<=3)
            return n-1;
        int[] dp  = new int[n+1];
        //dp[1] =1;
        dp[2] =2;
        dp[3] =3;
        
        for(int i =4; i<=n; i++){
            for(int j=2; j<=i/2; j++){
                dp[i] = Math.max(dp[i], dp[i-j]*dp[j]);
            }
        }
        return dp[n];
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容