zoukankan      html  css  js  c++  java
  • 96. Unique Binary Search Trees

    稍微有那么点意思了,用的DP。

    修修改改,居然做出来了。
    思路就是N的时候
    分别以1,2,3,4...n为ROOT
    左边分别有
    n-1,n-2...0
    0,1,2,3...n-1

    DP[n]表示n有几种可能:
    0表示null,就1种可能
    1也只有1种可能。

    所以就是dp左边*dp右边

    public class Solution {
        public int numTrees(int n) {
            if(n == 0) return 1;
            if(n == 1) return 1;
            
            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];
                    //System.out.println(dp[i]);
                }
            }
            
            return dp[n];
        }
    }
    

    好开心啊。。自己做出来了~~



    我一刷是怎么做出来的。。。

    比如N=5的时候,我们可以以1 2 3 4 5作为ROOT。
    假设以3作为ROOT,左边有2种可能,右边有2种可能,最后就是4种可能。
    以2为ROOT的话,左边有1种可能,右边是(345)组成的二叉树的可能。

    这么看来是动态规划。

    n = 5 就是以12345为ROOT的所有可能性加起来。。

    每种可能性里,左右的可能性要相乘。

    public class Solution {
        public int numTrees(int n) {
            if (n == 0) return 1;
            
            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[i - j] * dp[j - 1];
                }
            }
            
            return dp[n];
        }
    }
    
  • 相关阅读:
    java课堂作业--异常处理
    Node.js 应用---定时给自己发送邮件
    JAVA课堂作业(2019.10.21)
    添加学生信息系统
    Hdfs的java必会Api操作
    架构之美2
    mybatis知识点03
    mybatis知识点总结02
    mybatis知识点总结01
    第四周周总结
  • 原文地址:https://www.cnblogs.com/reboot329/p/6112106.html
Copyright © 2011-2022 走看看