343-Integer-Break
Last updated
Last updated
class Solution {
public int integerBreak(int n) {
if(n<4){
return n-1;
}
int result=1;
while(n>4){
result*=3;
n-=3;
}
return result*n;
}
}class Solution {
public int integerBreak(int n) {
if(n<=2){
return 1;
}
return recur(n);
}
private int recur(int n){
int result=0;
if(n==1){
return 1;
}
for(int i=1;i<=n/2;i++){
int left=integerBreak(i);
int right=integerBreak(n-i);
result=Math.max(Math.max(i*(n-i),left*right),result);
result=Math.max(i*right,result);
result=Math.max(left*(n-i),result);
}
return result;
}
}class Solution {
public int integerBreak(int n) {
if(n<=2){
return 1;
}
return recur(n);
}
private int recur(int n){
int[] dp=new int[n+1];
dp[1]=1;
for(int i=2;i<=n;i++){
dp[i]=i-1;
for(int j=1;j<=i/2;j++){
dp[i]=Math.max(Math.max(j*(i-j),dp[j]*dp[i-j]),dp[i]);
dp[i]=Math.max(j*dp[i-j],dp[i]);
dp[i]=Math.max(dp[i-j],dp[i]);
}
}
return dp[n];
}
}