day 35 | ● 343. 整数拆分 ● 96.不同的二叉搜索树

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.不同的二叉搜索树

day 35 | ● 343. 整数拆分 ● 96.不同的二叉搜索树_第1张图片

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]
}

你可能感兴趣的:(数据结构与算法,算法,数据结构)