代码随想录算法训练营day28 | 93. 复原 IP 地址,78. 子集,90. 子集 II

目录

93. 复原 IP 地址

78. 子集

90. 子集 II


93. 复原 IP 地址

难度:medium

类型:回溯,切割

 

思路:

131.分割回文串

        切割问题类似于组合问题;

        需要注意的事,我们使用count来作为递归终止条件,count统计的事“.”的个数,每个IP地址有四个数,当count等于3时,如果最后一个数也符合回文条件,则是合规的IP地址。count等于3时,递归终止。

代码:

class Solution {private List<String> ans = new ArrayList<>();// 对小圆点进行计数private int count = 0;public List<String> restoreIpAddresses(String s) {if (s == null || s.length() == 0) {return ans;}backtracking(s, 0);return ans;}public void backtracking(String s, int startIndex) {if (count == 3) {if (judge(s, startIndex, s.length())) {ans.add(s);}return;}for (int i = startIndex; i < s.length(); i++) {if (judge(s, startIndex, i + 1)) {// [startIndex, i + 1)符合要求,[0, startIndex - 1)已经验证过符合IP地址// [i + 1, s.length())还没有验证,递归给下一层进行验证s = s.substring(0, i + 1) + "." + s.substring(i + 1, s.length());count++;// 添加了原点所以i+1+1backtracking(s, i + 2);s = s.substring(0, i + 1) + s.substring(i + 2, s.length());count--;} else {break;}}}// 每个整数位于 0 到 255 之间组成,且不能含有前导 0// 左闭右开public boolean judge(String str, int start, int end) {// i + 2的隐患if (start >= end) {return false;}// 前导0if (str.charAt(start) == '0' && end > start + 1) {return false;}// 每个整数位于 0 到 255 之间组成int sum = 0;for (int i = start; i < end; i++) {if (str.charAt(i) < '0' || str.charAt(i) > '9') {return false;}sum = sum * 10 + (str.charAt(i) - '0');if (sum > 255) {return false;}}return true;}}
  • 时间复杂度: O(n * 2^n)
  • 空间复杂度: O(n^2)

78. 子集

难度:medium

类型:回溯,子集

 

思路:

        组合问题是收集递归树的叶子节点,子集问题就是收集递归树的每一个节点;

        本题nums没有重复元素,所以不用排序和去重。

代码:

// 子集问题需要收集递归树的每一个节点
class Solution {private List<List<Integer>> list = new ArrayList<>();private List<Integer> path = new ArrayList<>();public List<List<Integer>> subsets(int[] nums) {backtracking(nums, 0);return list;}public void backtracking(int[] nums, int startIndex) {// 记录所有节点,包括空集list.add(new ArrayList<>(path));// 终止条件可以不写if (startIndex == nums.length) {return;}for (int i = startIndex; i < nums.length; i++) {path.add(nums[i]);backtracking(nums, i + 1);path.remove(path.size() - 1);}}
}
  • 时间复杂度: O(n * 2^n)
  • 空间复杂度: O(n)

 

90. 子集 II

难度:medium

类型:回溯,子集

 

思路:

90.子集II

 

        这道题是 40.组合总和II 和 78.子集 的结合,结合了子集问题和去重方法;

        子集问题:收集递归树的每一个节点

        去重方法: 40.组合总和II,可以使用used数组也可以不用。代码随想录算法训练营day27 | 39. 组合总和,40. 组合总和 II,131. 分割回文串_Chamberlain T的博客-CSDN博客

        本题也可以不使用used数组来去重,因为递归的时候下一个startIndex是i+1而不是0。

        如果要是全排列的话,每次要从0开始遍历,为了跳过已入栈的元素,需要使用used。

代码:

class Solution {private List<List<Integer>> ans = new ArrayList<>();private List<Integer> path = new ArrayList<>();public List<List<Integer>> subsetsWithDup(int[] nums) {Arrays.sort(nums);backtracking(nums, 0);return ans;}public void backtracking(int[] nums, int startIndex) {ans.add(new ArrayList<>(path));if (startIndex >= nums.length) {return;}for (int i = startIndex; i < nums.length; i++) {// 去重,操作同 40. 组合总和 IIif (i > startIndex && nums[i] == nums[i - 1]) {continue;}path.add(nums[i]);backtracking(nums, i + 1);path.remove(path.size() - 1);}}
}
  • 时间复杂度: O(n * 2^n)
  • 空间复杂度: O(n)

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

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

相关文章

TIA博途软件无法搜索到CPU的解决办法汇总

TIA博途软件无法搜索到CPU的解决办法汇总 1. 检查电脑操作系统的兼容性 西门子对每个主要软件都会进行官方的兼容性测试过,其中重要一项是和 Windows 操作系统的兼容性,需要根据软件版本和 Windows 版本核对,如果不匹配,可能会有问题。 每个版本软件的安装条件可以参考以下…

沃罗诺伊图(Voronoi):帝国边界划分问题【2/2】

目录 一、说明 二、帝国边界划分问题 三、voronoi的正规定义 3.1 最简单的voronoi情况 3.2 在距离空间的数学描述 3.3 不同距离空间所得 Voronoi 单元不同 四、代码和库 4.1 算法库 4.2 参数说明 4.3 调用方法 五、后记 一、说明 Voronoi 单元也称为泰森多边形。 …

【LeetCode】1572.矩阵对角线元素的和

题目 给你一个正方形矩阵 mat&#xff0c;请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 示例 1&#xff1a; 输入&#xff1a;mat [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;25 解释&#xff1a;对角线的和为&a…

Mysql 复杂查询丨联表查询

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; JOIN&#xff08;联表查询&#xff09; 联表查询&#xff08;Join&#xff09;是一种在数据库中使用多个表进行关联查询的操作。它通过使用 JOIN 关键字将多个表连接在…

软考圈地震!2023年下半年软考改为机考,报名时间推迟到9月4日

【1】通知原文 关于2023年下半年计算机软件资格考试有关工作调整的通知 各省、自治区、直辖市及计划单列市、新疆生产建设兵团&#xff0c;香港、澳门计算机软件资格考试考务管理机构: 为全面做好计算机软件资格考试安全防控工作&#xff0c;确保考试公正、公平。现将有关工…

NOSQL——redis的安装,配置与简单操作

目录 一、缓存的相关知识 1&#xff09;缓存的概念 2&#xff09;系统缓存 buffer与cache&#xff1a; 3&#xff09;缓存保存位置及分层结构 DNS缓存 应用层缓存 数据层缓存 分布式缓存服务&#xff1a; 数据库&#xff1a; 硬件缓存 二、关系型数据与非关系型数据…

大厂急了,30+名企“报复性招人”

&#x1f4e2;紧急通知&#xff01;紧急通知&#xff01; 2024届秋招已全面开启&#xff01; 没错&#xff01;你没听错&#xff01;&#xff01;&#xff01;2024届秋招真的开始了&#xff0c;你还沉浸在暑假温柔乡&#xff0c;有些人已经拿到了offer&#xff01;惊不惊喜意…

飞凌嵌入式i.MX9352嵌入式ARM开发板,让通信安全又稳定——EMC防护,静电、浪涌、脉冲4级防护能力

随着新基建的加快推进&#xff0c;智能制造迎来了更好的发展时机&#xff0c;嵌入式板卡等智能设备也在更多的应用场景中大放异彩。但随着现场的设备数量的剧增&#xff0c;环境中的各种干扰信号也随之增加&#xff0c;这就对设备间通信的安全性与稳定性提出了更高的要求。 1【…

【Linux】网络通信

【Linux】网络通信 文章目录 【Linux】网络通信1、网络基础1.1 计算机网络1.2 网络模型TCP & UDP1&#xff09;IP地址2&#xff09;端口3&#xff09;TCP协议与UDP协议的比较 1.3 网络传输1.3.1 传输逻辑1.3.2 传输条件1.3.3 传输流程 1.4 地址管理 2、网络编程2.1 基本概念…

【算法|数组】滑动窗口

算法|数组——滑动窗口 引入 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度**。**如果不存在符合条件的子数组&#xff0c;返回 0 。 示例…

OceanBase 4.1.0 clog 目录探究

基于OceanBase 4.x 版本如何统计租户每日 clog 日志生成量的背景下&#xff0c;探究以及如何查看租户 clog 的使用情况。 作者&#xff1a;姜宇 爱可生 DBA 团队成员&#xff0c;擅长数据库故障排查和处理。对技术抱有热忱&#xff0c;实践是检验真理的唯一标准~ 本文来源&…

研究论文关于火灾的烟雾探测

普拉萨梅什加德卡尔 探索所有模型以选择最佳模型。 一、介绍&#xff1a; 烟雾探测器检测烟雾并触发警报以提醒他人。通常&#xff0c;它们存在于办公室、家庭、工厂等。通常&#xff0c;烟雾探测器分为两类&#xff1a; Photoelectric Smoke Detector- 设备检测光强度&#x…

微服务——es数据聚合+RestClient实现聚合

数据聚合 聚合的种类 DSL实现Bucket聚合 如图所示&#xff0c;设置了10个桶&#xff0c;那么就显示了数量最多的前10个桶&#xff0c;品牌含有7天酒店的有30家&#xff0c; 品牌含有如家的也有30家。 修改排序规则 限定聚合范围 DSL实现Metrics聚合 如下案例要求对不同的品…

将一组元素四舍五入到指定精度(小数位数)numpy.around()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 将一组元素四舍五入 到指定精度(小数位数) numpy.around() [太阳]选择题 关于以下代码说法错误的一项是? import numpy as np anp.array([21.3,9.67,8.5, -1.13, -2.67]) print(【显示】a为…

Uniapp基于微信小程序以及web端文件、图片下载,带在线文件测试地址

一、效果 传送门 二、UI视图 <scroll-view scroll-x="true" scroll-y="true" :style

使用C语言实现UDP消息接收

目录 简介:步骤:步骤 1: 创建套接字步骤 2: 接收消息步骤 3: 完成 函数及变量解释总结: 简介: 在网络通信中&#xff0c;UDP&#xff08;User Datagram Protocol&#xff09;是一种无连接协议&#xff0c;它提供了一种快速、高效的数据传输方法。本文将向您展示如何使用C语言编…

vmwera中安装的centos8出现ifconfig不可用

刚刚在虚拟机中装好centos结果发现自己的ifconfig命令不可用。 看一下环境变量里有没有ifconfig命令的路径&#xff0c;因为ifconfig是在/sbin路径下的&#xff0c;root用户登录进去才可以运行&#xff0c;先看一下root用户的环境变量。 root用户的环境变量里是有/sbin路径的&a…

API 测试 | 了解 API 接口概念|电商平台 API 接口测试指南

什么是 API&#xff1f; API 是一个缩写&#xff0c;它代表了一个 pplication P AGC 软件覆盖整个房间。API 是用于构建软件应用程序的一组例程&#xff0c;协议和工具。API 指定一个软件程序应如何与其他软件程序进行交互。 例行程序&#xff1a;执行特定任务的程序。例程也称…

VSCode-Python传参数进行Debug

新建demo.py import argparse def parse_args():description "debug example" parser argparse.ArgumentParser(descriptiondescription) help "The path of address"parser.add_argument(--host,help help) parser.add_ar…

IDEA新建类时自动设置类注释信息,署名和日期

IDEA设置路径 File --> Settings --> Editor --> File and Code Templates --> Include --> File Header 官方模板 这里 ${USER} 会读取计算机的用户名 ${DATE}是日期 ${TIME}是时间 /*** Author ${USER}* Date ${DATE} ${TIME}* Version 1.0*/