力扣 题目96- 不同的二叉搜索树

题目

题解

参考95题的思路 进行排列组合 

即以o(n)=o(i - 1)*o(n-i)的加和--i循环属于[1,n] ; 

也就是需要从1开始然后向上算到n

            for (int j = 1; j <= n;j++ ) {
                int num = 0;
                for (int i = 1; i <= j; i++) {
                   num += res[i - 1] * res[j - i];
                }
                res.push_back(num);
            }

题目

 1 #include<iostream>
 2 #include<vector>
 3 #include<stack>
 4 using namespace std;
 5 class Solution {
 6 public:
 7     int numTrees(int n) {
 8         if (n) {
 9             vector<int>res = {1};
10             for (int j = 1; j <= n;j++ ) {
11                 int num = 0;
12                 for (int i = 1; i <= j; i++) {
13                    num += res[i - 1] * res[j - i];
14                 }
15                 res.push_back(num);
16             }
17             return res.back();
18         }
19         else return 0;
20     }
21 };
22 
23 
24 
25 int main() {
26     Solution sol;
27     int result = sol.numTrees(19);
28     cout << result << endl;
29 }
View Code

 

posted @ 2022-07-20 15:41  无聊的阿库娅  阅读(12)  评论(0编辑  收藏  举报