Leetcode 343. Integer Break
题目
解析:
本质上这道题目和322 coin change是一样的,只不过用自然数替换coin,用max product替换min count而已,这边我们也用两种方法来解
解法1:recursion + memorization
这边的problem和subproblem之间的关系是:
F(s) = max(F(S-i)*i,(S-i)*i for all i)
根据这个式子,很简单的就可以得到解法。
python代码如下:
class Solution:
def integerBreak(self, n: int) -> int:
def dfs(remain):
if remain == 1:
return 1
if remain in memo:
return memo[remain]
memo[remain] = max([(i*max(remain-i,dfs(remain-i))) for i in range(1,remain)