-
题目链接 https://leetcode-cn.com/problems/integer-break/comments/
-
题目描述
- 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。
-
示例 1:
输入: 2 输出: 1 解释: 2 = 1 + 1, 1 × 1 = 1。
示例 2:
输入: 10 输出: 36 解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。
-
解题思路
- DP:将状态DP[i]定义为正整数 i 的最大乘积
- DP方程
-
代码
- python
class Solution: def integerBreak(self, n: int) -> int: dp = [0] * (n + 1) dp[2] = 1 for i in range(3, n + 1): for j in range(1, i // 2 + 1): dp[i] = max(dp[i], j * dp[i - j], j * (i - j)) return dp[-1]
- c++
class Solution { public: int integerBreak(int n) { if (n == 2) return 1; vector<int> dp(n + 1, 0); for(int i = 3; i <= n; ++i) for(int j = 1; j < i; ++j) dp[i] = max(dp[i], j * max(dp[i - j], i - j)); return dp[n]; } };
- python
leetcode 343. 整数拆分
最新推荐文章于 2022-07-11 20:08:01 发布