344.整数拆分

208 阅读1分钟

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

返回 你可以获得的最大乘积 。
算法:
方法一:动态规划
n 可以拆分为x,n-x, n-x可以继续拆分,也可以不拆分。 dp[i]为n = i时的,拆分成k个数能得到的的最大乘积 dp[i] = max(i * n - i, i * dp[n - i]), i取值[1,n]

func integerBreak(n int) int {
	dp := make([]int, n+1)
	dp[2] = 1
	dp[1] = 1
	for i := 2; i <= n; i++ {
		for j := 1; j < i; j++ {
			dp[i] = max(dp[i], max(j*(i-j), j*dp[i-j]))
		
		}
	}

	return dp[n]
}
func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}