343. 整数拆分
他是有三个数进行比较,原来的dp[i]、dp[j] * (i - j)、j*(i - j)。为什么第二个不包含第三个呢,因为我们设定的dp为至少两个数的乘积,所以dp[j]不包含j本身。
func integerBreak(n int) int {
dp := make([]int, n + 1)
dp[1] = 0
dp[2] = 1
for i := 3; i <= n; i++{
for j := 1; j < i; j++{
dp[i] = int(math.Max(float64(dp[i]), float64(dp[j] * (i - j))))
dp[i] = int(math.Max(float64(dp[i]), float64(j * (i - j))))
}
}
return dp[n]
}
96.不同的二叉搜索树
func numTrees(n int) int {
dp := make([]int, n + 1)
dp[0] = 1
dp[1] = 1
for i := 2; i <= n; i++{
for j := 0; j < i; j++{
dp[i] += dp[j]*dp[i - j - 1]
}
}
return dp[n]
}