leetcode代码记录(整数拆分

简介: leetcode代码记录(整数拆分

1. 题目:

给定一个正整数 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。

2. 我的代码:

class Solution:
    def integerBreak(self, n: int) -> int:
        # dp数组定义
        dp = [0] * (n + 1)

        # dp数组初始化
        dp[0] = 0
        dp[1] = 0
        dp[2] = 1

        # 遍历
        for i in range(3, n + 1):
            for j in range(1, i // 2 + 1):
                dp[i] = max(j * dp[i - j], dp[i], j * (i - j))

        return dp[n]

动态规划最重要最需要理清楚的点:

  1. dp数组及其下标的含义
  2. 递推公式
  3. dp数组初始化
  4. 遍历顺序

这里,通过推理得到:

  1. dp数组的下标代表的是整数值,dp数组的值代表的是这个整数拆分后乘积的最大值
  2. 递推公式j * dp[i - j]表示拆分的情况,j * (i - j)表示不拆分的情况,递推的每一步都需要把拆解方法都试一遍,第一个数字拆出来的范围就是1到i // 2,因为比i // 2大的话,i - j这个被拆的数就一定无法满足数字尽可能相同,要拆当然是拆大的。还要和之前拆的dp[i]比较一下,所以综合下来,递推公式就是:dp[i] = max(j * dp[i - j], dp[i], j * (i - j))
  3. dp数组的初始化:dp[0]肯定没有意义,dp[1]也没有意义,dp[2]等于1 * 1 = 1,因此给dp[0]和dp[1]都赋值为0,防止继续递推下去,如果递推下去就会0乘以任何数都是0
  4. 遍历顺序就是从3到n即可,最后输出的就是dp[n]


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