首页 > 其他分享 >刷刷刷 Day 40 | 96. 不同的二叉搜索树

刷刷刷 Day 40 | 96. 不同的二叉搜索树

时间:2023-03-01 21:58:39浏览次数:49  
标签:int 40 二叉 搜索 节点 Day dp 96

96. 不同的二叉搜索树

LeetCode题目要求

给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。

图

示例

输入:n = 3
输出:5
解题思路

五部曲
1、确定数组 dp[i],从 1 到 i 为节点组成二叉搜索树的个数
2、递推公式 dp[i] += dp[j - 1] * dp[i - j]
3、初始化 dp[0] = 1;
4、dp[i] += dp[j - 1] * dp[i - j]
5、推导举例

上代码

class Solution {
    public int numTrees(int n) {
        //初始化 dp 数组
        int[] dp = new int[n + 1];
        //初始化0个节点和1个节点的情况
        dp[0] = 1;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                //对于第i个节点,需要考虑1作为根节点直到i作为根节点的情况,所以需要累加
                //一共i个节点,对于根节点j时,左子树的节点个数为j-1,右子树的节点个数为i-j
                dp[i] += dp[j - 1] * dp[i - j];
            }
        }
        return dp[n];
    }
}
重难点

附:学习资料链接

标签:int,40,二叉,搜索,节点,Day,dp,96
From: https://www.cnblogs.com/blacksonny/p/17169980.html

相关文章

  • 路飞项目 day03 前端配置、后台主页、项目依赖问题
    一、路飞项目前端配置1.先删除一些不要的​ 删除多余的组件,只要app和首页组件​ 然后改一下组件的内部代码-App.vue中______________<template><divid="app"><rou......
  • LOJ 3276 JOISC 2020 Day2 遗迹 题解 (计数DP)
    LOJ链接UOJ链接观察一下n次地震的过程,发现最后会有n个石柱高度为0,\(1,2\cdotsn\)高度的石柱各有一个。假设现在已经确定了一种初始高度状态,我们来看看最后哪些石柱高度......
  • 刷刷刷 Day 40 | 343. 整数拆分
    343.整数拆分LeetCode题目要求给定一个正整数n,将其拆分为k个正整数的和(k>=2),并使这些整数的乘积最大化。返回你可以获得的最大乘积。示例1输入:n=2输......
  • day01(2023.3.1)
    1、了解了Java运行机制jdk和jre和jvm的区别 2、下载安装jdk然后配置环境变量 并验证是否成功(1)百度收搜Jdk8(推荐),找到下载地址。(2)同意协议,下载电脑对应的版本。......
  • 403. 青蛙过河 (Hard)
    问题描述403.青蛙过河(Hard)一只青蛙想要过河。假定河流被等分为若干个单元格,并且在每一个单元格内都有可能放有一块石子(也有可能没有)。青蛙可以跳上石子,但是不可以......
  • 1405. 最长快乐字符串 (Medium)
    问题描述1405.最长快乐字符串(Medium)如果字符串中不含有任何'aaa','bbb'或'ccc'这样的字符串作为子串,那么该字符串就是一个「快乐字符串」。给你三个整数a,b,c......
  • 代码随想录算法训练营Day28 回溯算法 | 491.递增子序列 46.全排列 47.全排列 II
    代码随想录算法训练营491.递增子序列题目链接:491.递增子序列给定一个整型数组,你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。示例:输入:[4,6,......
  • 代码随想录-day1
    链表今天主要是把链表专题刷完了,链表专题的题目不是很难,基本都是考察对链表的操作的理解。在处理链表问题的时候,我们通常会引入一个哨兵节点(dummy),dummy节点指向原链表的......
  • CFR-840-Div-2解题报告
    比赛传送门C.AnotherArrayProblem题意:给你一个数组\(a\),每次可以选两个位置\(i,j(i<j)\),将\([i,j]\)内的所有数替换为\(|a_i-a_j|\)。问最终数组的和最大为多少......
  • 韦东山2440-学习笔记-platform
    1.简介platform是设备驱动总线模型2.示例#include<linux/platform_device.h>#include<linux/module.h>staticstructplatform_device*led_dev;staticstru......