首页 > 其他分享 >代码随想录训练营第24天|回溯过程收集

代码随想录训练营第24天|回溯过程收集

时间:2024-09-09 19:54:18浏览次数:15  
标签:24 return nums int 随想录 vector result 回溯 path

93. 复原 IP 地址

class Solution {
public:
    vector<vector<string>> result;
    vector<string> path;

    bool check(string& sub){
        if(sub.length()>1&&sub[0]=='0')
            return false;
        try{
            if(stoi(sub)>255)
                return false;
        }
        catch(...){
            return false;
        }
        return true;        
    }

    void dfs(string s, int startIdx){
        if(path.size()==4){
            if(startIdx==s.length())
                result.push_back(path);
            return;
        }
        
        for(int endIdx=startIdx+1; endIdx<=startIdx+3&&endIdx<=s.length(); endIdx++){
            string sub=s.substr(startIdx,endIdx-startIdx);
            if(check(sub)){
                path.push_back(sub);
                dfs(s,endIdx);
                path.pop_back();
            }
        }
    }

    string join(vector<string> path){
        string ans=path[0];
        for(int i=1;i<path.size();i++){
            ans+="."+path[i];
        }
        return ans;
    }

    vector<string> restoreIpAddresses(string s) {
        dfs(s,0);
        vector<string> res;
        for(auto& path:result)
            res.push_back(join(path));
        return res;
    }
};

ip最多4段,所以根据path.size()终止回溯,此时如果字符串被切割到末尾,则是一个有效的分割。另外,每一段最大255,所以子串长度最大为3,据此可以进行剪枝。

78. 子集

class Solution {
public:
    vector<vector<int>> result;
    vector<int> path;

    void dfs(vector<int>& nums, int startIdx){
        if(path.size()==nums.size()){
            return;
        }
        for(int i=startIdx; i<nums.size(); i++){
            path.push_back(nums[i]);
            result.push_back(path);
            dfs(nums,i+1);
            path.pop_back();
        }
    }

    vector<vector<int>> subsets(vector<int>& nums) {
        result.push_back({});
        dfs(nums,0);
        return result;
    }
};

遍历的过程收集结果即可。

90. 子集 II

class Solution {
public:
    vector<vector<int>> result;
    vector<int> path;

    void dfs(vector<int>& nums, int startIdx){
        if(path.size()==nums.size()){
            return;
        }
        for(int i=startIdx; i<nums.size(); i++){
            path.push_back(nums[i]);
            result.push_back(path);
            dfs(nums,i+1);
            path.pop_back();
            while(i+1<nums.size()&&nums[i+1]==nums[i])
                i++;
        }
    }
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        result.push_back({});
        sort(nums.begin(),nums.end());
        dfs(nums,0);
        return result;
    }
};

回溯同层去重。

标签:24,return,nums,int,随想录,vector,result,回溯,path
From: https://blog.csdn.net/jiyisuifeng1991/article/details/141981129

相关文章

  • 代码随想录训练营第23天|回溯去重
    39.组合总和classSolution{public:vector<vector<int>>result;vector<int>path;intsum=0;voiddfs(vector<int>&candidates,inttarget,intstartIdx){if(sum==target){result.push_back(path......
  • The 2024 CCPC Online Contest
    目录写在前面LKBDEJIGC写在最后写在前面补题地址:https://codeforces.com/gym/105336以下按个人向难度排序。唉唉唐吧真是我去居然还能打出名额哈哈真牛逼L签到。K签到。dztlb大神直接秒了。显然奇数先手取1必胜,则偶数时为了让自己不输,先手和后手均会保证在取到2之......
  • 代码随想录day9-栈和队列1
    题目1232.用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现MyQueue类:voidpush(intx)将元素x推到队列的末尾intpop()从队列的开头移除并返回元素intpeek()返回队列开头的元素booleanempty()如......
  • 24暑假算法刷题 | Day41 | 动态规划 IX | LeetCode 188. 买卖股票的最佳时机 IV,309.
    目录188.买卖股票的最佳时机IV题目描述题解309.买卖股票的最佳时机含冷冻期题目描述题解714.买卖股票的最佳时机含手续费题目描述题解188.买卖股票的最佳时机IV点此跳转题目链接题目描述给你一个整数数组prices和一个整数k,其中prices[i]是某支给定......
  • 51nod 1243 排船的问题
    51nod1243排船的问题求最长绳子最短,考虑二分答案,判断时我们优先向左放,看是否能全放下。#include<bits/stdc++.h>usingnamespacestd;#definelllonglongintn,x,m;intpos[50005];intcheck(intmid){ intp=x;//偏差地图 intx2=x*2; intmx=m+x;//偏差地图 ......
  • 上交团队发布PathoDuet:面向H&E和IHC病理切片的自监督学习基础模型|文献精析·24-09-09
    小罗碎碎念本期主题:HE&IHC今天分享的文献于2024年7月31日发表于MedicalImageAnalysis,目前IF=10.7,作者来自上海交大。作者类型姓名单位单位翻译第一作者ShengyiHuaQingYuanResearchInstitute,ShanghaiJiaoTongUniversity,Shanghai200240,China清源研究院,......
  • 医学人工智能必读顶刊综述推荐|顶刊速递·24-09-09
    小罗碎碎念本期主题:医学AI综述最近应该很不少小伙伴在准备硕士/博士的开题,如果你的课题是与医学AI相关的,那么这期推文建议你好好读一读,共计13篇顶刊综述——病理组学7篇,影像组学6篇。虽然我只分了两类,但是里面包含了多模态的综述,也就是说你可以在这些文献中获取与基因......
  • 【win/mac】Adobe的视频特效编辑软件软件After Effects (AE)2024版本下载与安装
    目录1.1软件概述1.2主要功能1.3版本信息二、安装步骤2.1准备工作下载软件:2.2安装过程三、常用快捷键3.1基础操作快捷键3.2视图与导航快捷键3.3编辑与动画快捷键扩展快捷键1.1软件概述AdobeAfterEffects(简称AE)是Adobe公司推出的一款功能强大的图形视......
  • 【win/mac】Adobe的矢量图形编辑与设计软件Adobe Illustrator (Ai)2024版本下载与安装
    目录一、软件概述1.1定义与用途1.2主要特点1.3用户群体二、安装步骤2.1下载软件2.2安装准备2.3安装过程2.4验证安装三、常用快捷键3.1文件操作3.2编辑与选择3.3视图与导航3.4绘图与变换一、软件概述1.1定义与用途AdobeIllustrator是一款由Ado......
  • 【win/mac】Adobe的专业音频编辑软件Adobe Audition (AU)2024版本下载与安装
    目录一、软件简介二、安装步骤1.下载2.安装软件三、常用快捷键1.文件操作2.播放与录制3.视图与缩放一、软件简介AdobeAudition是一款由Adobe公司开发的专业音频编辑软件,广泛用于音频后期制作,包括混音、剪切、修复、录制和处理等。该软件以其强大的功能和用户......