給定一個正整數 n,將其拆分為至少兩個正整數的和,并使這些整數的乘積最大化。 返回你可以獲得的最大乘積。
示例 1:
輸入: 2
輸出: 1
解釋: 2 = 1 + 1, 1 × 1 = 1。
解題思路
組成整數兩個數可以進一步拆分,所以可以運用到動態規劃,dp[i]代表的是整數i拆分后的最大積,每次選擇最初拆分成的兩個整數的時候可能整數本身比整數的拆分乘積還要大,所以要取最大值
代碼
class Solution {public int integerBreak(int n) {int [] dp=new int[n+1];Arrays.fill(dp,0);dp[1]=1;for(int i=2;i<=n;i++)for(int j=i-1;j>=(i-1)/2;j--)dp[i]=Math.max(dp[i],Math.max(dp[j],j)*Math.max(dp[i-j],i-j)) ;return dp[n];}
}