leetcode每日一题:343. 整数拆分

简介: leetcode每日一题:343. 整数拆分

题目

给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。

返回 你可以获得的最大乘积 。


示例 1:

输入: n = 2

输出: 1

解释: 2 = 1 + 1, 1 × 1 = 1。


示例 2:

输入: n = 10

输出: 36

解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。


示例 3:

输入:m = 7, n = 3

输出:28


约束条件:

2 <= n <= 58


思路:

分析:动规五部曲。

1.确定dp[i]含义:拆分i,可以得到最大乘积为dp[i]

2 .确定递推公式: 最大乘积是怎么得到的,可以从1遍历到j,然后有两种渠道得到dp[i],一个是j*(ij),一个是jdp[i-j],相当于拆分了(i-j),为什么不拆分j呢?因为j是从1开始遍历的,遍历j的过程中,已经计算过拆分j的情况,如果都拆分的话,其实也是默认把所给的数强制拆分成了四份。所以递推公式是:dp[i] = max({dp[i], (i - j) * j, dp[i - j] * j});同时不断取最大值,满足dp[i]是最大

3.初始化dp数组。拆分0和1的最大乘积是多少?这个问题没什么解,所以从2开始初始化,dp[2] =1;

4.确定遍历顺序。 通过递推公式,可以看出dp[i]依赖的是dp[i-j]的状态,所以遍历i是从前往后的顺序,先有dp[i-j]再有dp[i];


代码实现:

class Solution {
    public int integerBreak(int n) {
        int[]dp = new int[n+1];
        dp[2] = 1;
        dp[3] = 2;
        dp[4] = 4;
        for(int i =3;i<=n;i++){
            for(int j =1;j<i-1;j++){
                dp[i] = Math.max(dp[i],Math.max(dp[i-j]*j,j*(i-j)));
            }
        }
        return dp[n];
    }
}


相关文章
|
4月前
|
存储
LeetCode整数反转
解决LeetCode上的整数反转问题的几种方法,包括错误的方法和优化后的解决方案,以及如何避免反转后的整数超出32位有符号整数范围的问题。
53 1
|
6月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
140 2
|
4月前
【LeetCode】整数翻转
【LeetCode】整数翻转
24 1
|
4月前
|
存储 C++
Leetcode第十二题(整数转罗马数字)
LeetCode第12题“整数转罗马数字”的解题方法,包括罗马数字的基本规则和特殊规则,以及如何使用C++实现整数到罗马数字的转换。
28 0
|
4月前
|
C++
Leetcode第十三题(罗马数字转整数)
这篇文章介绍了LeetCode第13题“罗马数字转整数”的解题方法,通过一个C++的类`Solution`中的`romanToInt`函数来实现,该函数使用哈希表和遍历字符串的方法,根据罗马数字的规则将输入的罗马数字字符串转换为对应的整数值。
68 0
|
4月前
|
算法 C++
Leetcode第八题(字符串转换整数(atoi))
这篇文章介绍了LeetCode上第8题“字符串转换整数(atoi)”的解题思路和C++的实现方法,包括处理前导空格、正负号、连续数字字符以及整数溢出的情况。
30 0
|
6月前
|
算法
LeetCode第12题目整数转罗马数字
该文章介绍了 LeetCode 第 12 题整数转罗马数字的解法,通过使用 TreeMap 按照整数从大到小排序,先使用大的罗马数字表示整数,再用小的,核心是先表示完大的罗马数字,想通此点该题较简单。
LeetCode第12题目整数转罗马数字
|
6月前
|
算法
LeetCode第8题字符串转换整数 (atoi)
该文章介绍了 LeetCode 第 8 题字符串转换整数 (atoi)的解法,需要对字符串进行格式解析与校验,去除前导空格和处理正负号,通过从高位到低位的计算方式将字符串转换为整数,并处理越界情况。同时总结了这几道题都需要对数字的表示有理解。
LeetCode第8题字符串转换整数 (atoi)
|
6月前
|
算法
LeetCode第7题整数反转
该文章介绍了 LeetCode 第 7 题整数反转的解法,通过除 10 取模和乘 10 累加的方式实现整数反转,同时注意边界情况的判断,并总结了通过举例推算发现规律的解题思路。
LeetCode第7题整数反转
|
6月前
|
算法
LeetCode第13题目罗马数字转整数
该文章介绍了 LeetCode 第 13 题罗马数字转整数的解法,通过从大到小解析罗马数字,根据罗马数字的特点,按照从大到小的顺序匹配罗马数字和整数的关系,从而解决该问题,同时强调要注意观察题目考查的知识点特征。