leetcode96。数学対異なるバイナリ検索ツリーの移動復帰?

整数nは、1 ... nは二分探索木のノードに求めている、何を考えますか?

例:

入力:3
出力:5
説明:
与えられたN = 3、5つの異なるバイナリ検索ツリー構造の全

   1 3 3 2 1
    \ / / / \ \
     3 2 1 3 2
    / / \ \
   2 1 2 3

アイデア:DP [n]は答えを表し、DP [n]は=

左の部分木ノード、右の子ノードN-1

左サブツリー・ノード2、N-2右サブツリーノード

................................

N-1個のノードの左サブツリー、右の子ノード

すべての例では、最大追加します。

public class Solution {
  public int numTrees(int n) {
    int[] dp = new int[n + 1];
    dp[0] = 1;
    dp[1] = 1;

    for (int i = 2; i <= n; ++i) {
      for (int j = 1; j <= i; ++j) {
        dp[i] += dp[j - 1] * dp[i - j];
      }
    }
    return dp[n];
  }
}

強すぎる数学的な公式は、あります。

公開された465元の記事 ウォンの賞賛8593 ビュー108万+

おすすめ

転載: blog.csdn.net/hebtu666/article/details/104085228