class Solution: def integerBreak(self, n: int) -> int: dp = [0] * (n + 1) dp[2] = 1 for i in range(3, n + 1): # 假设对正整数 i 拆分出的第一个正整数是 j(1 <= j < i),则有以下两种方案: # 1) 将 i 拆分成 j 和 i−j 的和,且 i−j 不再拆分成多个正整数,此时的乘积是 j * (i-j) # 2) 将 i 拆分成 j 和 i−j 的和,且 i−j 继续拆分成多个正整数,此时的乘积是 j * dp[i-j] for j in range(1, i // 2 + 1): dp[i] = max(dp[i], max(j * (i - j), j * dp[i - j])) return dp[n] if __name__ == '__main__': s=Solution() print(s.integerBreak(10))
LeetCode:343. 整数拆分
最新推荐文章于 2024-10-17 08:00:29 发布
该代码实现了一个名为`integerBreak`的函数,使用动态规划策略来解决将正整数n拆分为若干个正整数之和,以获得最大乘积的问题。函数通过遍历和计算所有可能的拆分组合,存储中间结果并取最大值,最终返回n的最大乘积。
摘要由CSDN通过智能技术生成