【每日力扣】 修剪二叉搜索树与复原 IP 地址

在这里插入图片描述

🔥 个人主页: 黑洞晓威
😀你不必等到非常厉害,才敢开始,你需要开始,才会变的非常厉害。

669. 修剪二叉搜索树

给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在 唯一的答案

所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。

image-20240318103130121

解决思路

  1. 如果当前节点为空,则直接返回空节点。
  2. 如果当前节点值小于最小边界,则修剪掉当前节点的左子树,并递归处理右子树。
  3. 如果当前节点值大于最大边界,则修剪掉当前节点的右子树,并递归处理左子树。
  4. 如果当前节点值在范围内,则修剪左右子树,并保持当前节点不变。

代码

class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int val) {this.val = val;}
}public class TrimBST {public TreeNode trimBST(TreeNode root, int low, int high) {if (root == null) {return null;}if (root.val < low) {// 如果根节点值小于最小边界,则修剪掉左子树,并递归处理右子树return trimBST(root.right, low, high);} else if (root.val > high) {// 如果根节点值大于最大边界,则修剪掉右子树,并递归处理左子树return trimBST(root.left, low, high);} else {// 根节点值在边界内,则修剪左右子树,并保持根节点不变root.left = trimBST(root.left, low, high);root.right = trimBST(root.right, low, high);return root;}}public static void main(String[] args) {TreeNode root = new TreeNode(3);root.left = new TreeNode(0);root.right = new TreeNode(4);root.left.right = new TreeNode(2);root.left.right.left = new TreeNode(1);int low = 1;int high = 3;TrimBST solution = new TrimBST();TreeNode result = solution.trimBST(root, low, high);// 输出结果System.out.println(result);}
}

复原 IP 地址

有效 IP 地址 正好由四个整数(每个整数位于 0255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。

  • 例如:"0.1.2.201" "192.168.1.1"有效 IP 地址,但是 "0.011.255.245""192.168.1.312""192.168@1.1"无效 IP 地址。

给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 '.' 来形成。你 不能 重新排序或删除 s 中的任何数字。你可以按 任何 顺序返回答案。

image-20240318105552056

解决思路

对于这个问题,我们可以使用回溯算法来生成所有可能的 IP 地址。具体步骤如下:

  1. 创建一个结果列表,用于存储所有有效的 IP 地址。
  2. 开始回溯搜索,遍历可能的 IP 地址格式。
  3. 在每一步中,判断当前的子串是否是合法的 IP 地址段(在 0 到 255 之间,且不能含有前导 0)。
  4. 如果满足条件,则继续递归搜索下一段 IP 地址。
  5. 如果四段 IP 地址都满足条件,并且已经遍历完整个字符串 s,则将当前的 IP 地址添加到结果列表中。

代码

import java.util.ArrayList;
import java.util.List;public class RestoreIPAddress {public List<String> restoreIpAddresses(String s) {List<String> result = new ArrayList<>();backtrack(s, 0, new ArrayList<>(), result);return result;}private void backtrack(String s, int start, List<String> path, List<String> result) {if (path.size() == 4 && start == s.length()) {result.add(String.join(".", path));return;}for (int i = 1; i <= 3; i++) {if (start + i > s.length()) {break;}String segment = s.substring(start, start + i);if (isValid(segment)) {path.add(segment);backtrack(s, start + i, path, result);path.remove(path.size() - 1);}}}private boolean isValid(String segment) {if (segment.length() > 1 && segment.charAt(0) == '0') {return false; // 不允许前导 0}int num = Integer.parseInt(segment);return num >= 0 && num <= 255;}public static void main(String[] args) {String s = "25525511135";RestoreIPAddress solution = new RestoreIPAddress();List<String> result = solution.restoreIpAddresses(s);System.out.println(result); // 输出 ["255.255.11.135","255.255.111.35"]}
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/754868.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git 仓库瘦身与 LFS 大文件存储

熟悉 Git 的小伙伴应该都知道随着 Git 仓库维护的时间越来越久&#xff0c;追踪的文件越来越多&#xff0c;git 存储的 objects 数量会极其庞大&#xff0c;每次从远程仓库 git clone 的时候都会墨迹很久。如果我们不小心 git add 了一个体积很大的文件&#xff0c;且 git push…

Linux和Windows类似的命令

以下是一些常用的Linux命令&#xff0c;它们类似于Windows的cmd命令&#xff1a; Windows cmd 命令 对应的 Linux 命令 dir ls cd cd copy cp del rm mkdir mkdir rmdir …

Linux系统(四)- 进程初识 | 环境变量 | 进程地址空间

~~~~ 前言冯诺依曼体系结构&#xff08;重要&#xff09;总览CPU工作方式什么是指令集&#xff1f;CPU为什么只和内存打交道&#xff08;数据交换&#xff09;&#xff1f;木桶效应&#xff1a;在数据层面的结论程序运行为什么要加载到内存&#xff1f; 进一步理解计算机体系结…

MySQL—数据库导入篇

什么是数据库&#xff1f; 数据库是干啥的&#xff1f; 数据库&#xff08;Database&#xff09;是按照数据结构来组织、存储和管理数据的仓库。 MySQL属于哪一类数据库&#xff1f; MySQL是一种关系型数据库。所谓的关系型数据库&#xff0c;是建立在关系模型基础上的数据库&a…

java项目打包(maven+原生)

一、maven打jar包 1.1 没有第三方依赖的jar java -jar maven项目打包提示.jar中没有主清单属性 <build><finalName>${project.artifactId}</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifact…

Cesium:绘制一个 3DTiles 对象的外包盒顶点

作者:CSDN @ _乐多_ 本文将介绍如何使用 Cesium 引擎根据模型的中心坐标,半轴信息,绘制一个 3DTiles 对象的外包盒顶点。 外包盒是一个定向包围盒(Oriented Bounding Box),它由一个中心点(center)和一个包含半轴(halfAxes)组成。半轴由一个3x3的矩阵表示,这个矩阵…

学习python笔记:9,with,requests,os,set,list,enumerate,numpy.array

with语句 在Python中&#xff0c;with语句用于确保某段代码执行完毕时&#xff0c;资源&#xff08;如文件对象、网络连接等&#xff09;可以被正确地清理。这通常涉及到使用上下文管理协议&#xff0c;该协议要求一个对象实现__enter__()和__exit__()两个方法。 with语句的基…

常见视频名词及视频格式

常见视频名词 时长&#xff1a;视频时间单位&#xff0c;基本单位&#xff1a;秒&#xff0c;常见格式&#xff1a;00:00:00:00&#xff08;时&#xff1a;分&#xff1a;秒&#xff1a;帧&#xff09; 帧&#xff1a;视频的基础单位 视频也是一帧一帧组成的&#xff0c;他是…

Java安全基础 关键概念过关

Java安全基础 关键概念汇总 文章目录 Java安全基础 关键概念汇总前置知识1.构造器this以及包的使用2.继承3.重写/ 重载 / super4.多态5.区分和equals方法6.toString的使用7.Object的概念8.static,final,代码块static代码块final 9.动态代理10.类的动态加载1)类加载器含义&#…

卷积篇 | YOLOv8改进之C2f模块融合SCConv | 即插即用的空间和通道维度重构卷积

前言:Hello大家好,我是小哥谈。SCConv是一种用于减少特征冗余的卷积神经网络模块。相对于其他流行的SOTA方法,SCConv可以以更低的计算成本获得更高的准确率。它通过在空间和通道维度上进行重构,从而减少了特征图中的冗余信息。这种模块的设计可以提高卷积神经网络的性能。本…

常用的vim和linux命令

常用的vim命令和linux命令 vim编辑器有三种模式 命令模式、编辑模式、末行模式 模式间切换方法&#xff1a; 1.命令模式下&#xff0c;输入&#xff1a;后&#xff0c;进入末行模式 2.末行模式下&#xff0c;按esc慢退、按两次esc快退、或者删除所有命令&#xff0c;可以回…

如何正确从github上下载数据集等内容

文章目录 一、现象&#xff1a;二、解决方案 一、现象&#xff1a; 数据集点击下载没有反应&#xff0c;那需要怎么下载数据集呢&#xff1f; 二、解决方案 输入以下命名行&#xff0c;亲测有效 git clone https://github.com/mymusise/ChatGLM-Tuning.git

LeetCode每日一题[C++]-1793.好子数组的最大分数

题目描述 给你一个整数数组 nums &#xff08;下标从 0 开始&#xff09;和一个整数 k 。 一个子数组 (i, j) 的 分数 定义为 min(nums[i], nums[i1], ..., nums[j]) * (j - i 1) 。一个 好 子数组的两个端点下标需要满足 i < k < j 。 请你返回 好 子数组的最大可能…

【ADF4351】使用FPGA进行SPI寄存器配置、使用FPGA计算各个频率的频点,ADF4351配置程序

简介 特性 输出频率范围&#xff1a;35 MHz至4,400 MHz 小数N分频频率合成器和整数N分频频率合成器 具有低相位噪声的VCO 可编程的1/2/4/8/16/32/64分频输出 典型抖动&#xff1a;0.3 ps rms EVM(典型值&#xff0c;2.1 GHz)&#xff1a; 0.4% 电源&#xff1a;3.0 V至3.6 V …

Selenium 自动化 —— 使用WebDriverManager自动下载驱动

上一篇文章 入门和 Hello World 实例 中&#xff0c;我们提供了一个最简单的 Selenium 上手的例子。 但是某一天&#xff0c;突然发现相同的代码居然运行报错了。这是怎么回事呢&#xff1f; 日志排查 日志中其实提示的很明显了&#xff1a;Chrome浏览器和Chrome WebDriver的…

adobe animate 时间轴找不到编辑多个帧按钮

如题&#xff0c;找了半天&#xff0c;在时间轴上找不到编辑多个帧按钮,导致无法批量处理帧 然后搜索发现原来是有些版本被隐藏了&#xff0c;需要再设置一下 勾选上就好了

day0 3r文档docker部署

3R编码 | 3R教室 - 最好的数字游民学习与交流俱乐部! (3rcd.com) window安装wsl下载不下来&#xff0c;正好有个服务器&#xff0c;就用linux吧密钥长度不匹配&#xff0c;设置一下长度即可 文档启动不成功&#xff0c;单独下载了下nginx&#xff0c;docker pull nginx:latest …

笔记本固态硬盘损坏数据恢复两种方法 笔记本固态硬盘损坏如何恢复

大家好&#xff01;今天要跟大家分享的是笔记本固态硬盘损坏数据恢复的两种方法。相信很多小伙伴都遇到过这种情况&#xff0c;电脑突然蓝屏或者死机&#xff0c;再开机后发现自己的数据不见了&#xff0c;这时候该怎么办呢&#xff1f;这可真是让人头疼。毕竟&#xff0c;我们…

LeetCode-回文数

LeetCode-回文数 解体思路&#xff1a; ①第一种&#xff1a;转换成字符串&#xff0c;使用字符串的现有api方法进行反转 ②第二种&#xff1a;直接使用循环除余乘10方法&#xff0c;进行反转 涉及知识点&#xff1a; 循环判断&#xff0c;StringBuffer&#xff0c;int类型…

Unity中实现游戏对象逐渐放大的脚本教程

这个脚本是用于Unity游戏开发的&#xff0c;其主要功能是使一个游戏对象&#xff08;在这个例子中是一个球体&#xff09;在一段时间内逐渐放大到一个目标大小。脚本使用了Unity的协程&#xff08;Coroutine&#xff09;来实现这一过程&#xff0c;下面是脚本的详细介绍&#x…