343.整数拆分

343.整数拆分

image-20200730225035995

题解

​ 我们并不知道这个数分成几个相乘会最大,所以要使用动态规划遍历计算所有的情况。一个数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];
    }
}

猜你喜欢

转载自blog.csdn.net/Rush6666/article/details/107702826