当前位置: 首页 > article >正文

力扣labuladong——一刷day38

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、力扣96. 不同的二叉搜索树
  • 二、力扣95. 不同的二叉搜索树 II


前言


计算n个节点的BSF数量,与构造n个节点的BFS的全收集

一、力扣96. 不同的二叉搜索树

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];
    }
}

回溯

class Solution {
    int[][] memo;
    public int numTrees(int n) {
        memo = new int[n+1][n+1];
        return fun(1,n);
    }
    public int fun(int low, int high){
        if(low > high){
            return 1;
        }
        if(memo[low][high] != 0){
            return memo[low][high];
        }
        int res = 0;
        for(int i = low; i <= high; i ++){
            res += fun(low, i-1) * fun(i+1,high);
        }

        memo[low][high] = res;
        return res;
    }
}

二、力扣95. 不同的二叉搜索树 II

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<TreeNode> generateTrees(int n) {
        List<TreeNode> res = new LinkedList<>();
        if(n == 0){
            return res;
        }
        return fun(1,n);
    }
    public List<TreeNode> fun(int low, int high){
        List<TreeNode> res = new LinkedList<>();
        if(low > high){
            res.add(null);
            return res;
        }
        for(int i = low; i <= high; i ++){
            List<TreeNode> l = fun(low,i-1);
            List<TreeNode> r = fun(i+1,high);
            for(TreeNode tl : l){
                for(TreeNode tr : r){
                    TreeNode cur = new TreeNode(i);
                    cur.left = tl;
                    cur.right = tr;
                    res.add(cur);
                }
            }
        }
        
        return res;
    }
}

http://www.kler.cn/a/133789.html

相关文章:

  • 爬虫补环境案例---问财网(rpc,jsdom,代理,selenium)
  • C++中string的新特性
  • C++编程技巧与规范-类和对象
  • C++面试基础知识:排序算法 C++实现
  • vue2+ element ui 集成pdfjs-dist
  • Android Framework AMS(16)进程管理
  • 车载通信架构 —— 传统车内通信网络发展回顾
  • 微积分在神经网络中的本质
  • 基于JavaWeb+SpringBoot+掌上社区疫苗微信小程序系统的设计和实现
  • 腾讯微服务平台TSF学习笔记(一)--如何使用TSF的Sidecar过滤器实现mesh应用的故障注入
  • 二维码智慧门牌管理系统升级解决方案:查询功能大提升,让地址查找变得轻松便捷!
  • 比较两个数组内容是否相同
  • 【机器学习6】概率图模型
  • 滑动窗口练习(一)— 固定窗口最大值问题
  • LinkWeChat V4.9.8 版本发布
  • HCIA-综合实验(三)
  • linux 邮箱配置
  • 十、Linux运行级别
  • 创芯科技USB_CAN【库文件】
  • Network(四)NAT实现方式与VRRP概述
  • SQL编写规范【干货】
  • YOLOv8改进 | 如何在网络结构中添加注意力机制、C2f、卷积、Neck、检测头
  • MySQL进阶_9.事务基础知识
  • Redis哨兵模式(Docker)
  • 抽象工厂模式-C++实现
  • 当小白遇到电脑程序不完全退出怎么办?