zoukankan      html  css  js  c++  java
  • [LeetCode]Unique Binary Search Trees

    题目:Unique Binary Search Trees

    找值为1->n的所有可能的二叉树。

    如果是找可能的数量而不需要列出所有可能时,可以用动态规划。

    思路如下:

    动态规划法:f(n)表示该子树中有n个数字可用来组成树枝
    f(0) = 1;空树
    f(1) = 1;树根
    f(2) = f(0)*f(1) + f(1)*f(0);当左子树有0个数,右子树右1个数的情况和当左子树有1个数,右子树有0个数的情况;
    f(3) = f(0)*f(2) + f(1)*f(1) + f(2)*f(0);

    ...
    f(n) = f(0)*f(n-1) + f(1)*f(n-2) + ... + f(n-1)*f(0);

    注意事项:

    1.外循环从2开始,内循环不能超过外循环的循环变量;

    2。每次开始内循环时,将累加的变量清零。

    int numTrees2(int n){
        if (n < 2)return 1;
        vector<int> nums;
        nums.push_back(1);
        nums.push_back(1);
        for (int i = 2; i <= n; i++)
        {
            int num = 0;
            for (int j = 0; j < i; j++)
            {
                num += nums[j] * nums[i - j - 1];
            }
            nums.push_back(num);
        }
        return nums[n];
    }

    同类型的题目:http://www.cnblogs.com/yeqluofwupheng/p/6755645.html

  • 相关阅读:
    Epplus
    常用的android弹出对话框
    android 获取当前位置
    android:inputType参数类型说明
    PageRank算法
    XGBoost算法
    FP-growth算法
    卡方分布与卡方检验
    Apriori算法
    关联规则
  • 原文地址:https://www.cnblogs.com/yeqluofwupheng/p/6661393.html
Copyright © 2011-2022 走看看