343.整数拆分
题解
我们并不知道这个数分成几个相乘会最大,所以要使用动态规划遍历计算所有的情况。一个数i,可以分为j和i-j,也可以把i-j继续细分。设f[i]为所求值,所以比较j*(i-j)和j*f[i-j]即可。其中1 <= j < i,f[0] = f[1] = 0
代码
class Solution {
public int integerBreak(int n) {
int[] f = new int[n+1];
int max = 0;
f[0] = f[1] = 0;
for(int i = 2; i <= n; i++){
for(int j = 1; j < i; j++){
max = Math.max(max,Math.max(j*(i-j),j*f[(i-j)]));
}
f[i] = max;
}
return f[n];
}
}