不同的二叉搜索树——动态规划

55 阅读1分钟

image.png

动态规划代码:

  1. 注释代码超时了
  2. 新代码用for循环模拟递归,来完成动态规划,由小问题到大问题
func numTrees(n int) int {
    G := make([]int, n + 1)
    G[0], G[1] = 1, 1
    for i := 2; i <= n; i++ {
        for j := 1; j <= i; j++ {
            G[i] += G[j-1] * G[i-j]
        }
    }
    return G[n]
}

// func recur(a, b int) int {
//     if a > b {
//         return 1
//     }
//     ans := 0
//     for i := a; i <= b; i++ {
//         lt := recur(a, i-1)
//         rt := recur(i+1, b)
//         ans += lt * rt
//     }
//     return ans
// }