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

news2024/9/20 14:23:56

在这里插入图片描述
这道题和选取回文子串的题目类似,就是一个子集划分的问题,但是子集划分是有终止条件的,也就是这个划分并不是把所有的划分可能都塞进结果集了。当划分到达最后一个位置的时候,划分结束,不包含最后一个划分位置的子集划分方案不要,超出四个子集的划分方案不要。

仔细看的话,这个递归是有两个出口的,一个是正常执行结束到函数体末尾(也就是:不包含最后一个划分位置的子集划分方案不要),一个是终止条件,当我们需要所有的划分可能时候,直接拿掉终止条件就行

class Solution {
public:
    vector<string> res;
    vector<string> resVec;
    void resInit() {}
    bool isValid(string& chooseList, int start, int i) {
        string s(chooseList.begin() + start, chooseList.begin() + i + 1);
        if (s.size() > 1 && s[0] == '0') {
            return false;
        }
        int str_to_int = atoi(s.c_str());
        if (str_to_int > 255 || str_to_int < 0) {
            return false;
        }
        return true;
    }
    void traceback(vector<string> resVec, string& chooseList, int start) {
        if (start >= chooseList.size()) {
            if (resVec.size() == 4) {
                string resStr = "";
                for (auto i : resVec) {
                    resStr += i;
                    resStr += ".";
                }
                resStr.pop_back();
                res.push_back(resStr);
            }

            return;
        }

        for (int i = start; i < chooseList.size(); i++) {
            if (!isValid(chooseList, start, i)) {
                continue;
            }

            resVec.push_back(
                string(chooseList.begin() + start, chooseList.begin() + i + 1));
            traceback(resVec, chooseList, i + 1);
            resVec.pop_back();
        }
    }
    vector<string> restoreIpAddresses(string s) {
        traceback(resVec, s, 0);
        return res;
    }
};

在这里插入图片描述
无重元素,不可复取

class Solution {
public:
    vector<vector<int>> res;
    vector<int> resVec;
    void resInt();
    bool isValid(){
        return true;
    }
    void traceback(vector<int> resVec,vector<int>& nums,int start){

         for(int i = start;i< nums.size();i++){
             if(!isValid()){
               continue;
             }

             resVec.push_back(nums[i]);
             traceback(resVec,nums,i+1);
             resVec.pop_back();
         }

            res.push_back(resVec);
         
    }
    vector<vector<int>> subsets(vector<int>& nums) {
          traceback(resVec,nums,0);

          return res;
    }
};

在这里插入图片描述
可重元素,不可复取

class Solution {
public:
    vector<vector<int>> res;
    vector<int> resVec;
    vector<bool> visit;
    void resInit(vector<int>& nums){
        vector<bool> visitTem(nums.size(),false);
        visit = visitTem;
        sort(nums.begin(),nums.end());
    }
    bool isValid(vector<int>& nums,vector<bool> &visit,int i){
        if(i - 1 >= 0 && !visit[i-1] && nums[i-1] == nums[i]){
            return false;
        }
        return true;
    }
    void traceback(vector<int> resVec,vector<bool> visit,vector<int>& nums,int start){
        for(int i = start;i< nums.size();i++){
           if(!isValid(nums,visit,i)){
              continue;
           }
           resVec.push_back(nums[i]);
           visit[i] = true;
           traceback(resVec,visit,nums,i+1);
           resVec.pop_back();
           visit[i] = false;
        }
        res.push_back(resVec);
    }
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        resInit(nums);
        traceback(resVec,visit,nums,0);
        return res;
    }
};

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

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

相关文章

为企业插上“翅膀”,看长沙如何助推民营企业上市!

在讨论城市经济发展水平时&#xff0c;上市公司数量经常被作为关键指标&#xff0c;是一座城市的“财富”。它不仅代表城市繁荣程度&#xff0c;也有利于人口安居乐业。所以&#xff0c;虽然各地政府的发展目标中&#xff0c;少不了培育上市公司这一条。 但是&#xff0c;从市…

Gitlab-runner注册与配置

文章目录 概要操作流程获取HTTPS证书上传证书修改gitlab-runner dns配置文件gitlab-runner 注册 概要 本文主要介绍了Gitlab-runner在内网环境注册到gitlab的操作方式。内网环境如下&#xff1a; 1、gitlab-runner由docker镜像部署&#xff1b; 2、gitlab部署与内网&#xff0…

WordPress自动生成原创文章插件

WordPress作为最受欢迎的内容管理系统之一&#xff0c;为博客和网站的搭建提供了便捷的解决方案。而在内容创作方面&#xff0c;自动生成原创文章的插件为WordPress用户提供了更为高效的选项。 什么是WordPress自动生成原创文章插件&#xff1f; WordPress自动生成原创文章插件…

分类预测 | Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别

分类预测 | Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别 目录 分类预测 | Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别。 2.自…

[论文笔记] Gradient Surgery for Multi-Task Learning

【强化学习 137】PCGrad - 知乎 多任务学习(multi task):任务权重、loss均衡、梯度下降那点事 - 知乎 ICLR 2020 rejected submission:Yu T, Kumar S, Gupta A, et al. Gradient surgery for multi-task learning[J]. arXiv preprint arXiv:2001.06782, 2020. mul…

mysql虚拟列Generated Column

目录​​​​​​​ 1、Generated Column简介 生成的列定义具有以下语法&#xff1a; 2、实践 2.1 存储格式为json字段增加索引 2.2 手机号后四位 3、虚拟列索引介绍 3.1 虚拟列索引的限制 3.1.1 Virtal Generated Column 4、阿里云数据库环境是否支持 下期扩展&…

【数据结构和算法初阶(C语言)】二叉树的顺序结构--堆的实现/堆排序/topk问题详解---二叉树学习日记②

目录 ​编辑 1.二叉树的顺序结构及实现 1.1 二叉树的顺序结构 2 堆的概念及结构 3 堆的实现 3.1堆的代码定义 3.2堆插入数据 3.3打印堆数据 3.4堆的数据的删除 3.5获取根部数据 3.6判断堆是否为空 3.7 堆的销毁 4.建堆以及堆排序 4.1 升序建大堆&#xff0c;降序建小堆 4.2堆…

python自定义日历库,与对应calendar库函数功能基本一致

目录 自定义日历库 常用列表 日期列表 常用函数 闰年判断 月份天数 元旦序号 日历表头 星期序号 序号及天数 月历字串 打印月历 年历字串 打印年历 对比测试 测试结果 完整代码 运行结果 自定义日历库 自定义日历库函数&#xff0c;并使得其与python calend…

学习笔记 | 微信小程序项目day03

今日学习内容 配置自定义导航栏通用轮播组件通用的轮播图组件完善以及主页调用分类面板以及热门推荐面板猜你喜欢模块&#xff08;分页查询&#xff09;首页下拉刷新首页骨架屏 配置自定义导航栏 1、创建自定义组件 /index/components/CustomNavbar.vue <script setup l…

安捷伦agilent dso9254a示波器

181/2461/8938产品概述&#xff1a; 安捷伦DSO9254A示波器配有15英寸XGA显示器&#xff0c;封装厚度仅为9英寸&#xff08;23厘米&#xff09;&#xff0c;重量仅为26磅&#xff08;11.8千克&#xff09;&#xff0c;以节省您有限的工作台空间。该范围旨在为您提供最广泛的测量…

酷开科技与您共筑希望,酷开系统助力孩子成长启航

​父母是孩子的第一任老师&#xff0c;家庭是孩子的第一所学校。良好的家庭教育&#xff0c;对于孩子人格的形成以及终身教育有着不可估量的作用。每一个优秀孩子的背后&#xff0c;都有一个优秀的家庭。那么怎么才能让孩子健康快乐的接受知识呢&#xff1f;酷开系统中为孩子打…

文件的创建与删除

文件的创建 使用File类创建一个文件对象&#xff0c;例如&#xff1a;File filenew File("c:\\myletter" , "letter.txt"); public boolean createNewFile();/*如果c:\myletter目录中没 有名字为letter.txt文件&#xff0c;文件对象file调用createNewFil…

Python和R的区别是什么,Python与R的应用场景是什么?

如果你这么问&#xff0c;那么你可能正站在数据科学的起点。对于志在成为数据专业人员的你来说&#xff0c;学习编程是无疑的。我想行你早就听过Python 与R的比较之声&#xff0c;并在选择中感到困惑。在此&#xff0c;我想说&#xff0c;也算是一种安慰吧&#xff1a;对于语言…

Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(后记)

2024.03.05&#xff1a; 测试了开发板网线直连电脑可以传输数据。但是通过开发板→交换机→电脑&#xff0c;没有数据传输过去。通讯采用UDP通讯。首先是UDP传输不可靠&#xff0c;有可能存在丢包、包先后顺序有问题&#xff0c;这就无法满足后续对采集数据的傅里叶变换和傅里…

实不相瞒,我抖音小店三月的收入,可能是你半年的收入

大家好&#xff0c;我是电商花花。 很难想象吧&#xff0c;抖音小店能做起来也挺赚钱的。 钱这对于一个人来说&#xff0c;有多重要&#xff1f; 相信大家也都很清楚&#xff0c;没有钱的支撑&#xff0c;当生活给你一巴掌&#xff0c;我们根本无力回击。 但是绝大数人的常…

3D地理空间数据

过去十年中&#xff0c;地理空间革命在采集硬件、处理软件和云技术方面取得了重大进展。 新用户发现地理空间技术越来越容易使用。 随着数据可用性&#xff08;新获取的数据或开放公共档案&#xff09;的增加&#xff0c;沟通结果的需求也随之增加。 2D&#xff08;或 2.5D&…

【LeetCode 算法刷题笔记-路径篇】

1.0112. 路径总和 1.1 题目大意 描述&#xff1a;给定一个二叉树的根节点 root 和一个值 targetSum。 要求&#xff1a;判断该树中是否存在从根节点到叶子节点的路径&#xff0c;使得这条路径上所有节点值相加等于 targetSum。如果存在&#xff0c;返回 True&#xff1b;否则…

三 C#插入排序算法

简介 插入排序算法是一种简单、直观的排序算法&#xff0c;其原理是将一个待排序的元素逐个地插入到已经排好序的部分中。 插入排序实现原理 插入排序算法是一种简单、直观的排序算法&#xff0c;其原理是将一个待排序的元素逐个地插入到已经排好序的部分中。 具体实现步骤…

鸿蒙Harmony应用开发—ArkTS声明式开发(绘制组件:Rect)

矩形绘制组件。 说明&#xff1a; 该组件从API Version 9开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 Rect(value?: {width?: string | number,height?: string | number,radius?: string | number | Array<s…

用 二层口 实现三层口 IP 配置的一个实现方法

我们一般用 undo portswitch 来将二层口转为三层口&#xff0c;但如果设备不支持的话&#xff0c;那么。。。 一、拓朴图&#xff1a; 二、实现方法&#xff1a; 起一个 vlan x&#xff0c;配置 vlanif地址&#xff0c;然后二层口划分到 vlan x 下&#xff0c;对端做同样的配置…