回溯算法探索篇Ⅲ

news2024/11/15 17:24:51

Leetcode93——复原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 中的任何数字。你可以按 任何 顺序返回答案。

示例 1:

输入:s = "25525511135"
输出:["255.255.11.135","255.255.111.35"]

算法思想:

通过回溯算法不断地划分字符串,如若找到一个合法的ip就加入到结果集当中。

算法实现:

//判断ip地址中字串是否合法
bool isValid(string s,int left,int right){
        if(left>right) return false;
        if(right-left>2) return false;
        if(right-left>=1){
            if(s[left]=='0') return false;
        }
        int num=stoi(s.substr(left,right-left+1));
        if(num<0 || num>255) return false;
        return true;
    }
    void backtracking(vector<string> &res,string &s,int start,int point){
        if(point==3){
            //划分了前三个部分合法地址,若最后一部分也合法加入到结果集当中
            if(isValid(s,start,s.size()-1)){
                res.push_back(s);
            }
            return;
        }
        for(int i=start;i<s.size();i++){
            if(isValid(s,start,i)){
                //部分地址合法加入.划分地址
                s.insert(i+1,".");
                point++;
            }else{
                continue;
            }
            backtracking(res,s,i+2,point);
            point--;
            s.erase(i+1,1);
        }
        return;
    }
    vector<string> restoreIpAddresses(string s) {
        vector<string> res;
        if (s.size() < 4 || s.size() > 12) return res;
        backtracking(res,s,0,0);
        return res;
    }

Leetcode78——子集

题目描述:

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

示例 1:

输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

算法思想:

利用回溯算法收集结果。草图又来了。

算法实现:

void backtracking(vector<vector<int>> &res,vector<int> &path,vector<int> &nums,int start){
        //每进一次递归收集一下结果
        res.push_back(path);
        if(start>=nums.size()) return;
        for(int i=start;i<nums.size();i++){
            path.push_back(nums[i]);
            backtracking(res,path,nums,i+1);
            path.pop_back();
        }
        return;
    } 
    vector<vector<int>> subsets(vector<int>& nums) {
        vector<vector<int>> res;
        vector<int> path;
        backtracking(res,path,nums,0);
        return res;
    }

Leetcode90——子集Ⅱ

题目描述:

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

示例 1:

输入:nums = [1,2,2]
输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]

算法思想:

与上题很像,不过要加上去重处理,因为本题中会有相同的元素。对给定数组进行排序后再进行处理,方便去重。请看草图

算法实现:

void backtracking(vector<vector<int>> &res,vector<int> &path,vector<int> &nums,int start){
        res.push_back(path);
        if(start>=nums.size()) return;
        for(int i=start;i<nums.size();i++){
            /*同层去重处理当i>start时表示在同一层(这块可以结合上图去理解)
            同一层的同样数据只需处理一次*/
            if(i>start && nums[i]==nums[i-1]) continue;
            path.push_back(nums[i]);
            backtracking(res,path,nums,i+1);
            path.pop_back();
        }
        return;
    }
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        vector<vector<int>> res;
        vector<int> path;
        sort(nums.begin(),nums.end());
        backtracking(res,path,nums,0);
        return res;
    }

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

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

相关文章

PyTorch — 初学者教程

一、说明 在本文中,我将编译 PyTorch 的初学者教程。本教程大量使用了官方 PyTorch 教程中的材料。

Java SE--IO流

一.File类型 如果我们想在程序中操作或者描述一个文件夹或文件&#xff0c;可以使用File类型 File类型在java.io包下 File可以新建&#xff0c;删除&#xff0c;移动&#xff0c;修改&#xff0c;重命名文件夹&#xff0c;也可以对文件或者文件夹的属性进行访问&#xff1b;…

嵌入式软件--模电基础 DAY 2

强电和弱电&#xff0c;简单一点是以电死人为标准的&#xff0c;交流电36伏特以下&#xff0c;直流电24V以下&#xff0c;为安全电压&#xff0c;是为弱电&#xff0c;反则强电。 市电进入家庭&#xff0c;连接你的电脑&#xff0c;220V的电压为什么没有让你感到危险&#xff…

【TiDB】09-修改tidb客户端访问密码

目录 1、修改配置文件 2、停止tidb-server 3、以root方式启动脚本 4、修改密码 5、停止脚本重启服务 1、修改配置文件 进入tidb-server默认部署位置 #切换tidb账号 su tidb# 进入tidb-server部署路径 cd /tidb-deploy/tidb-4000# 修改配置 vim ./conf/tidb.toml添加内容…

Nginx之我不会的

安装 windows下安装 这里我们选择windows下的稳定版本 之后就是解压&#xff0c;安装到英文目录下 启动&#xff08;关闭&#xff09;命令 windows命令 启动 nginx.exe 或者 start nginx 关闭 nginx -s quit&#xff08;会有一定程序退出&#xff09; 或 nginx -s stop &…

企业低代码平台那个好用?企业低代码推荐

近些年&#xff0c;很多大型的互联网公司开始了自研低代码开发平台的尝试&#xff0c;包括阿里、腾讯、华为等等国内头部大厂。由此我们可以了解到即使是开发能力富余的互联网大厂&#xff0c;也同样需要低代码的快速响应需求能力来应对数字化时代多变的功能需求。然而&#xf…

本地phpstudy部署算命系统,用户端是H5页面,支持微信支付宝支付,支持微信支付宝登录

算命系统本地部署教程 0. 技术架构1. 启动Apache、MySQL服务2. 创建前台和后台两个网站3. Navicat连接数据库4. 登录后台是长这个样子5. 登录前台登录样子6. 代码结构是 0. 技术架构 前端&#xff1a;HTMLCSSJquery 后端&#xff1a;PHP 数据库&#xff1a;MySQL 1. 启动Ap…

C++简单实现多态案例-制作饮品

代码示例如下&#xff1a; #include<iostream> using namespace std;class AbstractDrinking { public:virtual void Soil() 0;//第一步、煮开水virtual void Brew() 0;//第二步、冲泡virtual void PourInCup() 0;//第三步、倒入杯中virtual void AddSomething() 0;…

Lab 1 实验 MapReduce

&#x1f442; 若月亮没来 (若是月亮还没来)&#xff08;若是月亮还没来&#xff09; - 王宇宙Leto/乔浚丞 - 单曲 - 网易云音乐 目录 &#x1f33c;参考代码 &#x1f419;解析 &#x1f41f;mrsequential.go &#x1f41f;mrapps/wc.go &#x1f4d5;实验--准备 &…

Linux---02---系统目录及文件基本操作命令

课程回顾 操作系统 虚拟机安装 本章重点 Linux系统目录结构 常用命令 熟练区分Linux下各层目录的作用 熟练掌握Linux的常用命令&#xff08;文件命令、时间命令等&#xff09; 一、Linux系统目录结构 1.1 目录结构 /&#xff1a; 根目录&#xff0c;一般根目录下只存放…

KEEPALIVED是什么?以及实现各功能的配置实验

一、高可用集群KEEPALIVED 1.1 KEEPALIVED的出现 LVS ---> HAProxy ---> KEEPALIVED LVS&#xff1a; LVS&#xff1a;四层调度&#xff0c;IP地址&#xff0c;mac地址以及端口对后端进行调度。优点&#xff1a;速度快&#xff0c;对 LVS 的性能要求比较低。缺点&…

离职保密协议是什么?怎么样才是合法的?如何维护公司权益?

“商贾之道&#xff0c;在于诚信&#xff1b;机密之重&#xff0c;犹胜千金。” 在历史的长河中&#xff0c;商业机密一直是商家兴衰成败的关键。 时至今日&#xff0c;随着科技的飞速发展&#xff0c;信息时代的浪潮更是将商业秘密的保护推向了新的高度。 离职保密协议&…

前端(HTML + CSS)小兔鲜儿项目(仿)

前言 这是一个简单的商城网站&#xff0c;代码部分为HTML CSS 和少量JS代码 项目总览 一、头部区域 头部的 购物车 和 手机 用的是 文字图标&#xff0c;所以效果可以和文字一样 购物车右上角用的是绝对定位 logo用的是 h1 标签&#xff0c;用来提高网站搜索排名 二、banne…

简单的class.getResource与classLoader.getResource区别

简单的getClass().getResource()与ClassLoader.getResource()区别 1.简介 我们在springboot项目中&#xff0c;如果要获取到自己配置的资源或者配置类信息一般会用到Class.getResource()或ClassLoader.getResource()&#xff0c;这两种方式在使用的过程中很容易混淆&#xff…

echarts格式化图例回调函数返回对象

使用返回的对象可以自定义图例显示 formatter:function(obj){var label obj.seriesName "<br/>" obj.marker obj.name ":" obj.value "宗" "<br/>" "占比" obj.percent "%";return label…

四川大型数字媒体产业园区在哪里,有推荐吗?

四川省作为中国西南地区的经济和文化重镇&#xff0c;数字媒体产业的发展取得了令人瞩目的成绩。以下是四川省排名前十的数字媒体产业园&#xff0c;这些园区在推动科技创新和区域经济发展方面发挥了重要作用。 1、 国际数字影像产业园 位置&#xff1a;成都市金牛区 特点&…

触摸屏接口设置-洋桃百科

触摸屏接口设置-洋桃百科 电路设计 ​​ 触摸屏的组成&#xff1a; PCB板层&#xff1a;是电子设备中用于支撑和连接电子元件的基板。 显示层&#xff1a;是LCD触摸屏的核心部分&#xff0c;负责生成视觉图像。它由以下部分组成&#xff1a; 液晶层&#xff1a;包含液晶材料…

框架盛行,还记得原生JS如何获取表单数据吗?

你好同学&#xff0c;我是沐爸&#xff0c;欢迎点赞、收藏和关注&#xff01;个人知乎 在这个前端框架遍地开花的时代&#xff0c;同学们常常被React、Vue、Angular等现代JavaScript框架的便捷性和高效性所吸引。那么多年过去&#xff0c;你还记得原生JS是如何获取表单数据的吗…

论文分享|MLLMs中多种模态(图像/视频/音频/语音)的tokenizer梳理

本文旨在对任意模态输入-任意模态输出 (X2X) 的LLM的编解码方式进行简单梳理&#xff0c;同时总结一些代表性工作。 注&#xff1a;图像代表Image&#xff0c;视频代表Video&#xff08;不含声音&#xff09;&#xff0c;音频代表 Audio/Music&#xff0c;语音代表Speech 各种…

docker数据卷和资源控制

目录 数据卷 实现数据卷 宿主机和容器之间进行数据共享 容器与容器之间进行数据共享 容器互联 docker容器的资源控制 cpu 1.设置cpu资源控制&#xff08;比重&#xff09; 2. 设置cpu的资源占用比&#xff08;权重&#xff09; 3.设置容器绑定cpu 内存 1.内存限制 …