整数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];
}
}
強すぎる数学的な公式は、あります。