leetcode【每日一题】343. 整数拆分 Java

题干

给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。

示例 1:

输入: 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1

示例 2:

输入: 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36

想法

动态规划
dp[i]表示到i的最大值
如果把1到i拆分为
1到j j到i
如果j到i不再拆了,那么等于i*(j-i)
如果要拆:等于j*dp[i-j])
动态规划一遍即可

Java代码

package daily;

public class IntegerBreak {
    public int integerBreak(int n) {
     int []dp=new int[n+1];

     for (int i=2;i<=n;i++){
         int max=0;
         for (int j=1;j<i;j++){
             max=Math.max(max,Math.max(j*(i-j),j*dp[i-j]));
         }
         dp[i]=max;
     }
     return  dp[n];
    }

    public  static  void main(String[] args){
        IntegerBreak integerBreak=new IntegerBreak();
        System.out.println(integerBreak.integerBreak(10));
    }
}

我的leetcode代码都已经上传到我的githttps://github.com/ragezor/leetcode

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值