day28 回溯算法part4

93. 复原 IP 地址

中等
有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 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 中的任何数字。你可以按 任何 顺序返回答案。

class Solution {
    List<String> res = new LinkedList<>();
    LinkedList<String> path = new LinkedList<>();

    public List<String> restoreIpAddresses(String s) {
        backtrack(s, 0);
        return res;
    }

    public void backtrack(String s, int start) {
        if(path.size() == 4 && start == s.length()) {
            res.add(String.join(".", path));
           
        }
        for (int i = start; i < s.length(); i++) {
            if (!isValid(s, start, i)) { // 判断这段数字合不合法
                continue;
            }
            if(path.size() >= 4) break; // 已经分解成 4 部分了,不能再分解了
            // 如果合法,加入路径
            path.add(s.substring(start, i + 1));
            // 继续向右切
            backtrack(s, i + 1);
            // 撤销加入
            path.remove(path.size() - 1);
        }
    }
    // 判断字符串s在左闭右闭区间[start, end]所组成的数字是否合法
    boolean isValid(String s, int start, int end) {
        if (start > end) return false;
        // 0开头的数字不合法, 除非是 ‘0’
        if (s.charAt(start) == '0' && start != end) return false;
    
        int num = 0;
        for (int i = start; i <= end; i++) {
            // 遇到⾮数字字符不合法(好像不用判断)
            if (s.charAt(i) > '9' || s.charAt(i) < '0') { 
                return false;
            }
            num = num * 10 + (s.charAt(i) - '0');
            if (num > 255) return false;  // 如果⼤于255了不合法
        }
        return true;
    }
}

78. 子集

中等
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
在这里插入图片描述

class Solution {
    List<List<Integer>> res = new ArrayList<>();
    List<Integer> path = new ArrayList<>();

    public List<List<Integer>> subsets(int[] nums) {
        backtrack(nums, 0);
        return res;
    }

    public void backtrack(int[] nums, int start) {
        res.add(new ArrayList<>(path));
        if (path.size() == nums.length) return; //可以不写


        for (int i = start; i < nums.length; i++) {
            path.add(nums[i]);
            backtrack(nums, i + 1); //backtrack(nums, start + 1);总是写成这个!!!
            path.remove(path.size() - 1);
        }
        return;
    }
}

90. 子集 II

中等
给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。
在这里插入图片描述

class Solution {
    List<List<Integer>> res = new ArrayList<>();
    List<Integer> path = new ArrayList<>();

    public List<List<Integer>> subsetsWithDup(int[] nums) {
        Arrays.sort(nums);
        backtrack(nums, 0);
        return res;
    }

    public void backtrack(int nums[], int start) {

        res.add(new ArrayList<>(path));
        for (int i = start; i < nums.length; i++) {
            // i != start这个可大有讲究,以【1,2,2】为例,
            // 它保证了可以收集到【1,2,2】【2,2】等结果
            // 不能写成 i != 0,这样会漏掉很多
            // 剪枝减的主要是在每次准备在剩余集合里挑元素时,已经挑过一遍的情况
            if (i != start && nums[i] == nums[i - 1]) {
                continue;
            }
            path.add(nums[i]);
            backtrack(nums, i + 1);
            path.remove(path.size() - 1);
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

报错 Cannot read properties of undefined(reading‘addEventListener‘)如何解决

我在制作项目中遇到了一个问题&#xff0c;给大家分享一下&#xff0c;如下图&#xff1a; 问题&#xff1a;这是我给一个input输入框绑定的监听事件出现的报错 翻译&#xff1a;无法读取未定义的属性(读取 addEventListener ) 错误原因&#xff1a;js中操作的dom元素的函数方…

知识库是什么?为什么这么多企业都在用?

在信息化的时代&#xff0c;万物互联&#xff0c;企业获取、积累和应用知识的方式也因此发生了巨大的变化。有一项重要工具正是知识库&#xff0c;许多企业和组织都在广泛地使用它。那么&#xff0c;到底什么是知识库&#xff1f;为什么它能受到广泛的接纳和应用呢&#xff1f;…

MongoDB:从容器使用到 Mongosh、Python/Node.js 数据操作(结构清晰万字长文)

文章目录 1. 容器与应用之间的关系介绍2. 使用 Docker 容器安装 MongoDB3. Mongosh 操作3.1 Mongosh 连接到 MongoDB3.2 基础操作与 CRUD 4. Python 操作 MongoDB5. Nodejs 操作 MongoDB5.1 Mongodb 和 Mongoose5.2 推荐在项目中使用 Mongoose 参考文献 1. 容器与应用之间的关系…

数据质量和数据治理的关系 | 京东云技术团队

很多不太了解的人会认为&#xff1a;数据治理就是干数据清洗的。 近两年&#xff0c;在我们公司&#xff0c;数据治理团队在数据降本方面做的比较多&#xff0c;效果还不错&#xff0c;我们很多人可能以为&#xff1a;数据治理就是做数据清理的。 在京东科技集团数据治理工作…

如何使用Docker部署JSON Crack

文章目录 1. 在Linux上使用Docker安装JSONCrack2. 安装Cpolar内网穿透工具3. 配置JSON Crack界面公网地址4. 远程访问 JSONCrack 界面5. 固定 JSONCrack公网地址 JSON Crack 是一款免费的开源数据可视化应用程序&#xff0c;能够将 JSON、YAML、XML、CSV 等数据格式可视化为交互…

链接脚本常用命令(KEEP、MEMORY、PROVIDE、ENTRY、AT、ALIGN等)

1、命令介绍 命令作用KEEP保证该段一定在输出文件里&#xff0c;不会被丢弃MEMORY描述目标设备的内存情况&#xff0c;内存分几个区域&#xff0c;每个内存区域的属性PROVIDE从链接脚本导出符号给C语言或者汇编语言使用ENTRY程序入口AT指定段的加载地址ALIGN指定地址的对齐LOA…

入门产品经理详细教程!PM常用工具|岗位职责|学习书单|能力模型|与项目经理的区别

移动互联网和AI时代&#xff0c;产品经理无疑是备受瞩目的工作&#xff0c;产品经理负责提出各种创意&#xff0c;同时协调各种资源&#xff0c;推动创意落地实现产品从0到1&#xff0c;而且互联网上对产品经理这个职业也有诸多赞誉—— 产品经理是最接近CEO的岗位产品经理是站…

解密Sentinel中流控规则的阀值奥秘

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 解密Sentinel中流控规则的阀值奥秘 前言阀值类型基础&#xff1a;Sentinel中的数字量规1. QPS&#xff08;每秒查询率&#xff09;阀值&#xff1a;2. 线程数阀值&#xff1a;3. 关联规则阀值&#xf…

Java基于SpringBoot的学科竞赛系统,附源码,文档

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

【HarmonyOS应用开发】ArkUI 开发框架-基础篇-第一部分(七)

常用基础组件 一、组件介绍 组件&#xff08;Component&#xff09;是界面搭建与显示的最小单位&#xff0c;HarmonyOS ArkUI声明式开发范式为开发者提供了丰富多样的UI组件&#xff0c;我们可以使用这些组件轻松的编写出更加丰富、漂亮的界面。组件根据功能可以分为以下五大类…

活动回顾 | 矩阵起源 CEO 王龙:与大数据结合,是大模型成熟的必经之路

导读 近日&#xff0c;由数据猿和上海大数据联盟主办&#xff0c;上海市经济和信息化委员会、上海市科学技术委员会指导的“第六届金猿季&魔方论坛——大数据产业发展论坛”在上海市四行仓库举行&#xff0c;吸引了数百位业界精英的参与。 本次论坛以“小趋势大未来”为主…

专业138总分420+中国科学技术大学843信号与系统考研经验中科大电子信息通信

**今年中科大专业课843信号与系统138分&#xff0c;总分420顺利上岸&#xff0c;梦圆中科大&#xff0c;也是报了高考失利的遗憾&#xff0c;总结一下自己的复习经历&#xff0c;希望可以给大家提供参考。**首先&#xff0c;中科大843包括信号与系统&#xff0c;和数字信号处理…

怎样选择多线程多进程和多协程?

有这么多可以实现并发的方式方法,那么,我们怎么确定在合适的时机采用合适的实现方法呢?这就需要我们对各个实现并发的方式方法有一个全面的概念性的理解,以及他们的内在执行逻辑优缺点有一个清晰的认识! 如下图所示,首先我们需要对单进程、多进程、多线程及多协程之间有…

华为配置在用户物理位置变化时部署业务随行示例(V200R006C00、V200R007C00、V200R008C00)

配置在用户物理位置变化时部署业务随行示例&#xff08;V200R006C00、V200R007C00、V200R008C00&#xff09; 业务随行简介配置注意事项组网需求需求分析数据规划配置思路操作步骤配置文件 组网图形 图1 组网图 业务随行简介配置注意事项组网需求需求分析数据规划配置思路操作步…

记录 | ubuntu nm命令的基本使用

什么是nm命令 nm命令是linux下针对某些特定文件的分析工具&#xff0c;能够列出库文件&#xff08;.a、.lib&#xff09;、目标文件&#xff08;*.o&#xff09;、可执行文件的符号表。 nm命令的常用参数 -A 或 -o 或 --print-file-name&#xff1a;打印出每个符号属于的文件…

跟着pink老师前端入门教程-day14+15

2.6 main 主体模块制作 HTML&#xff1a; <div class"w"><div class"main"><!-- 焦点图模块 --><div class"focus"><ul><li><img src"./images/banner_bg.png" alt""></li>…

【Midjourney】关于标准模型的几个按钮都有什么用

当用户在Midjourney Bot所在的服务发送/settings命令时就能调出设置窗口&#xff0c;本文将介绍该窗口中的各个按钮都有什么作用。 1.RAW Mode 依照官方的描述来看V5.2模型似乎带有自动优化功能&#xff0c;会对用户输入的关键词空白描述进行补全和优化&#xff0c;以便修复所…

ansible 常用命令 基本说明 个人备忘

linux下设置一台机器的名称为ansible hostnamectl set-hostname ansible //设置一台机器的名称为master-01 hostnamectl set-hostname master-01 hostnamectl set-hostname master-02 hostnamectl set-hostname node01 hostnamectl set-hostname node02 hostnamectl set-…

Linux 入门基础知识(一)—— Linux的基本使用

Linux 入门基础知识 一、Linux的基本使用和配置1.1、终端1.2、消耗内存1.3、运行级别1.6、登录前欢迎语1.5、登录后欢迎语1.6、shell1.7、ps aux1.8、设置主机名1.9、whoami和who am i1.10、命令提示符 二、Linux执行命令的过程详解和命令类型2.1、命令执行2.2、hash缓存表2.3、…

MySQL的原生API实现插入数据后在可视化工具上不显示的问题解决

显示表中有两行数据&#xff0c;该表也设置了主键和唯一索引 点进表里看却没有数据 问题原因出现在这里&#xff0c;虽然很多常用的数据库连接池都会开启自动提交&#xff0c;但ibatis的SqlSession使用sessionFactory.openSession()创建时&#xff0c;默认的自动提交是false&am…