LeetCode 96~100

article/2025/9/8 5:43:15

前言

本文隶属于专栏《LeetCode 刷题汇总》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构请见LeetCode 刷题汇总

正文

幕布

在这里插入图片描述

幕布链接

96. 不同的二叉搜索树

题解

官方题解​

动态规划

class Solution {public int numTrees(int n) {int[] G = new int[n + 1];G[0] = G[1] = 1;for (int i = 2; i <= n; i++) {for (int j = 1; j <= i; j++) {G[i] += G[j - 1] * G[i - j];}}return G[n];}
}

数学,卡特兰数

class Solution {public int numTrees(int n) {// 提示:我们在这里需要用 long 类型防止计算过程中的溢出long C = 1;for (int i = 0; i < n; ++i) {C = C * 2 * (2 * i + 1) / (i + 2);}return (int) C;}
}

97. 交错字符串

题解

类似路径问题,找准状态方程快速求解​

路径问题

class Solution {public boolean isInterleave(String s1, String s2, String s3) {int m = s1.length(), n = s2.length();if (s3.length() != m + n) return false;// 动态规划,dp[i,j]表示s1前i字符能与s2前j字符组成s3前i+j个字符;boolean[][] dp = new boolean[m+1][n+1];dp[0][0] = true;for (int i = 1; i <= m && s1.charAt(i-1) == s3.charAt(i-1); i++) dp[i][0] = true; // 不相符直接终止for (int j = 1; j <= n && s2.charAt(j-1) == s3.charAt(j-1); j++) dp[0][j] = true; // 不相符直接终止for (int i = 1; i <= m; i++) {for (int j = 1; j <= n; j++) {dp[i][j] = (dp[i - 1][j] && s3.charAt(i + j - 1) == s1.charAt(i - 1))|| (dp[i][j - 1] && s3.charAt(i + j - 1) == s2.charAt(j - 1));}}return dp[m][n];}
}

98. 验证二叉搜索树

题解

官方题解​

递归 + long pre

class Solution {long pre = Long.MIN_VALUE; // 记录上一个节点的值,初始值为Long的最小值public boolean isValidBST(TreeNode root) {return inorder(root);}// 中序遍历private boolean inorder(TreeNode node) {if(node == null) return true;boolean l = inorder(node.left);if(node.val <= pre) return false;pre = node.val;return l && inorder(node.right);}
}

栈迭代+long pre

class Solution {private boolean flag = true;private long pre = Long.MIN_VALUE;public boolean isValidBST(TreeNode root) {if(root == null){return true;}helper(root);return flag;}private void helper(TreeNode root){Stack<TreeNode> stack = new Stack<>();while(root != null || !stack.isEmpty()){while(root != null){stack.push(root);root = root.left;}root = stack.pop();if(root.val <= pre){flag = false;break;}pre = root.val;root = root.right;}}
}

99. 恢复二叉搜索树

题解

官方题解​

显式中序遍历+数组+递归

class Solution {public void recoverTree(TreeNode root) {List<Integer> nums = new ArrayList<Integer>();inorder(root, nums);int[] swapped = findTwoSwapped(nums);recover(root, 2, swapped[0], swapped[1]);}public void inorder(TreeNode root, List<Integer> nums) {if (root == null) {return;}inorder(root.left, nums);nums.add(root.val);inorder(root.right, nums);}public int[] findTwoSwapped(List<Integer> nums) {int n = nums.size();int index1 = -1, index2 = -1;for (int i = 0; i < n - 1; ++i) {if (nums.get(i + 1) < nums.get(i)) {index2 = i + 1;if (index1 == -1) {index1 = i;} else {break;}}}int x = nums.get(index1), y = nums.get(index2);return new int[]{x, y};}public void recover(TreeNode root, int count, int x, int y) {if (root != null) {if (root.val == x || root.val == y) {root.val = root.val == x ? y : x;if (--count == 0) {return;}}recover(root.left, count, x, y);recover(root.right, count, x, y);}}
}

隐式中序遍历+栈,x/y/prev

class Solution {public void recoverTree(TreeNode root) {Deque<TreeNode> stack = new ArrayDeque<>();TreeNode x = null, y = null, prev = null;while (!stack.isEmpty() || root != null) {while (root != null) {stack.push(root);root = root.left;}root = stack.pop();if (prev != null && root.val < prev.val) {y = root;if (x == null) {x = prev;} else {break;}}prev = root;root = root.right;}swap(x, y);}public void swap(TreeNode x, TreeNode y) {int tmp = x.val;x.val = y.val;y.val = tmp;}
}

Morris 遍历算法

class Solution {public void recoverTree(TreeNode root) {TreeNode x = null, y = null, pred = null, predecessor = null;while (root != null) {if (root.left != null) {// predecessor 节点就是当前 root 节点向左走一步,然后一直向右走至无法走为止predecessor = root.left;while (predecessor.right != null && predecessor.right != root) {predecessor = predecessor.right;}// 让 predecessor 的右指针指向 root,继续遍历左子树if (predecessor.right == null) {predecessor.right = root;root = root.left;}// 说明左子树已经访问完了,我们需要断开链接else {if (pred != null && root.val < pred.val) {y = root;if (x == null) {x = pred;}}pred = root;predecessor.right = null;root = root.right;}}// 如果没有左孩子,则直接访问右孩子else {if (pred != null && root.val < pred.val) {y = root;if (x == null) {x = pred;}}pred = root;root = root.right;}}swap(x, y);}public void swap(TreeNode x, TreeNode y) {int tmp = x.val;x.val = y.val;y.val = tmp;}
}

100. 相同的树

题解

官方题解​

递归

class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {if (p == null && q == null) {return true;} else if (p == null || q == null) {return false;} else if (p.val != q.val) {return false;} else {return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);}}
}

http://chatgpt.dhexx.cn/article/i2SL6EHU.shtml

相关文章

【下载】快速通过Python笔试?学大家一样先把LeetCode答案私藏了

如今学习python的同学越来越多了&#xff0c;也正是同学们秋招时期&#xff0c;去年分享了LeetCode答案后&#xff0c;已经有上百位同学找到小编开始实践这个平台。 LeetCode&#xff0c;让程序员进阶的在线平台&#xff0c;找工作备战名企技术面试&#xff01;(文末阅读原文到…

面试失败总结,这 577 道 LeetCode 题 Java 版答案你值得拥有

去字节、美团、BAT 等大厂面试&#xff0c;刷 LeetCode 上的数据结构算法题是必修课。许多读者说&#xff0c;刷题的时候经常会遇到困难&#xff0c;想要找一本答案题解做参考。 下面分享几个用 Java 语言实现的开源 LeetCode 题解&#xff0c;也要感谢这些优秀的开源作者们&a…

LeetCode答案大全题(java版)

思路&#xff1a;查找时&#xff0c; 建立索引&#xff08;Hash查找&#xff09; 或进行排序&#xff08;二分查找&#xff09;。本题缓存可在找的过程中建立索引&#xff0c;故一个循环可以求出解&#xff08;总是使用未 使用元素查找使用元素&#xff0c;可以保证每一对都被检…

LeetCode数据库题目汇总一(附答案)

1、基础SQL 数据表: dept: deptno(primary key), dname, loc emp: empno(primary key), ename, job, mgr(references emp(empno)), sal, deptno(references dept(deptno)) 1 列出emp表中各部门的部门号,最高工资,最低工资 select max(sal) as 最高工资,min(sal) as 最…

Leetcode各种题型题目+思路+代码(共176道题及答案)

文章目录 第一章&#xff1a;Leetcode 每日很多题 1、Leetcode-1047 删除字符串中的所有相邻重复项 2、剑指 Offer 53 - I. 在排序数组中查找数字 I 3、Leetcode704:二分查找 4、 Leetcode 227&#xff1a;基本计算器II 5、leetcode 224&#xff1a;基本计算器(带括号的计…

Leetcode Top100题目和答案(Java完整版 面试必备)

二刷完剑指Offer后又刷了一遍Leetcode Top 100专栏的题目&#xff0c;听说基本上能涵盖面试的算法题&#xff0c;总体来说收获还是很大的&#xff0c;下面贴出答案&#xff0c;又不懂的可以给我留言&#xff0c;博主会及时解答。 我的github 准备把春招复习的知识都整理到githu…

数据可视化-柱状图-dict结构MACARONS主题

from pyecharts.charts import Bar from pyecharts.faker import Faker from pyecharts.globals import ThemeTypec (Bar({"theme": ThemeType.MACARONS}).add_xaxis(Faker.choose()).add_yaxis("商家A", Faker.values()).add_yaxis("商家B", F…

echarts图表主题--马卡龙macarons--自己配置主题颜色

用过echarts的人都几道&#xff0c;他的官网风格颜色对比强烈&#xff0c;这样儿式的&#xff1a; 大多时候和你的项目风格难免冲突&#xff0c;它有一些风格配置&#xff0c;我觉得马卡龙这个配色就很好&#xff1a; 当然&#xff0c;既然是配置项&#xff0c;肯定不止这一种…

若依vue --雷达图封装使用

大概效果: 如下 1:封装 <template><div :class"className" :style"{ height: height, width: width }" /> </template><script> import echarts from "echarts"; require("echarts/theme/macarons"); // e…

vuejs集成echarts的一些问题

最近在做Beetlex的数据分析平台&#xff0c;在开发这个产品过程中涉及到大量的数据图表展示功能&#xff1b;由于产品前端使用的是vuejs开发&#xff0c;所以在集成echarts或多或少会碰到一些问题&#xff0c;在这里主要讲解一下碰到的问题和解决方法。 在讲解之前先分享一下实…

Echarts主题构建工具的使用

Echarts自带丰富的主题配色&#xff0c;对于有独立的UI设计&#xff0c;主题的应用范围不是很广泛&#xff0c;但是官方的配色还是具有很大的参考价值的。 传送门&#xff1a;https://echarts.apache.org/zh/theme-builder.html 下载或复制以下的主题保存至 *.js 文件&#x…

Echarts-主题切换

从网上搜索了相关的方法&#xff0c;是主题之前的切换&#xff0c;但是用的是下拉框类型的&#xff0c;也可以设置div样式&#xff0c;参考官网那种 设置一个div&#xff0c;通过三个图片的点击效果实现切换主题的功能 我用的jQuery和Echarts是cdn&#xff0c;如果您想引用js文…

vue项目中Echarts图表完整引入、按需加载以及修改主题色

一、完整引入Echarts 下载安装echarts包 npm install echarts -Soryarn add echarts 定义图表显示的容器&#xff0c;并进行渲染 <template><div id"myChart" ref"myChart"></div> </template><style>#myChart {widt…

动态创建多个echarts图表

效果: <template> <div class"wrapper"><Row v-for"(items, index) in secondeData" :key"index"><Col span"12" v-for"m in items" :key"m"><div class"chart" :ref"…

echarts基础应用

第一步&#xff1a;下载相应的js文件&#xff1a;echarts.min.js和macarons.js&#xff0c;其中macarons.js文件时主题文件。 第二步&#xff1a;编写index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">&…

关于在vue中动态渲染echart组件,渲染失败的问题

以下chart是在正常页面中&#xff08;不在蒙层中&#xff09;&#xff1a; 用echart组件时&#xff0c;渲染数据多数情况下会是动态添加&#xff0c;也就是前台获取数据&#xff0c;通过props传递给echart组件。对于vue生命周期函数执行顺序不熟悉的小伙伴儿&#xff0c;会碰…

echart vue

文档&#xff1a; https://echarts.apache.org/zh/tutorial.html#5%20%E5%88%86%E9%92%9F%E4%B8%8A%E6%89%8B%20ECharts 1、条形 <template><div> <!-- 包其他内容需要有个外div --><div :class"className" :style"{height:height,width:…

Vue + Echarts自定义图标颜色及柱状图动态伸缩(定时)

1、效果图&#xff1a; 2、Vue代码 <template><!--区域分布数量柱状图--><div class"emp-area"></div> </template><script>require(/assets/theme/chalk)require(echarts/theme/macarons)export default {name: "StaffA…

如何使用pyecharts中的主题样式?

如何使用pyecharts中的主题样式&#xff1f; pyechart为用户提供了一套使用方便的主题风格。 本篇图文将总结pyecharts.globals中ThemeType所有主题风格并进行详细的解释。 class _ThemeType:BUILTIN_THEMES ["light", "dark", "white"]LIGH…

python亲和数_用 Python 分析了 5 万条相亲数据,告诉你男女相亲背后的秘密

作者| 叶庭云 责编 | 张文 来源 | 转载自修炼 Python(ID&#xff1a;yetingyun_python) 前言 数据来源&#xff1a;https://www.zhenai.com/zhenghun/ 本文利用 Python 分析了按城市寻找所有地区的征婚信息&#xff0c;看看相亲男女的画像。 数据查看和预处理 导入用到的库 …