首页 > 编程语言 >算法刷题 Day 28 | ● 93.复原IP地址 ● 78.子集 ● 90.子集II

算法刷题 Day 28 | ● 93.复原IP地址 ● 78.子集 ● 90.子集II

时间:2023-01-31 00:23:37浏览次数:44  
标签:return nums 28 back vector 子集 result path Day

详细布置

93.复原IP地址

本期本来是很有难度的,不过 大家做完 分割回文串 之后,本题就容易很多了

题目链接/文章讲解:https://programmercarl.com/0093.%E5%A4%8D%E5%8E%9FIP%E5%9C%B0%E5%9D%80.html

视频讲解:https://www.bilibili.com/video/BV1XP4y1U73i/

Tips:下面是自己写出的题解,虽然和carl的实现方式略有不同,但是思路是差不多的。

我的题解:

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

    void backtracking(string s, int pos){
        if(pos == s.size() && path.size() == 4){
            string temp = "";
            for(int i = 0; i<path.size(); i++){
                temp += path[i] + ".";
            }
            temp.pop_back();
            result.push_back(temp);
            return;
        }

        for(int i = pos; i<s.size() && (i - pos) <=3 ; i++){
            string front = s.substr(pos, i - pos + 1);
            if(judge(front)){
                path.push_back(front);
                backtracking(s,i+1);
                path.pop_back();
            }
        }
    }

    bool judge(string str){
        if(str.size()>=2&&str[0] == '0'){
            return false;
        }
        int num = 0;
        for(int i=0; i<str.size();i++){
            if(str[i]>'9' || str[i] < '0'){
                return false;
            }
            num = num * 10 + (str[i] - '0');
        }
        if(num >255){
            return false;
        }
        return true;
    }

    vector<string> restoreIpAddresses(string s) {
        backtracking(s,0);
        return result;
    }
};

78.子集

子集问题,就是收集树形结构中,每一个节点的结果。 整体代码其实和 回溯模板都是差不多的。

题目链接/文章讲解:https://programmercarl.com/0078.%E5%AD%90%E9%9B%86.html

视频讲解:https://www.bilibili.com/video/BV1U84y1q7Ci

Tips:子集其实就是在每次更新path的时候都将结果加入到result当中去即可。

我的题解:

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

    void backtracking(vector<int>& nums, int pos){
        if(pos >= nums.size()){
            return;
        }

        for(int i = pos; i< nums.size(); i++){
            path.push_back(nums[i]);
            result.push_back(path);
            backtracking(nums, i+1);
            path.pop_back();
        }
    }

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

90.子集II

大家之前做了 40.组合总和II 和 78.子集 ,本题就是这两道题目的结合,建议自己独立做一做,本题涉及的知识,之前都讲过,没有新内容。

题目链接/文章讲解:https://programmercarl.com/0090.%E5%AD%90%E9%9B%86II.html

视频讲解:https://www.bilibili.com/video/BV1vm4y1F71J

Tips:回溯时记得也要更新used数组的状态

我的题解:

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

    void backtracking(vector<int>& nums, int pos, vector<bool>& used){
        if(pos >= nums.size()){
            return;
        }

        for(int i = pos; i < nums.size(); i++){
            if(i >= 1 && nums[i] == nums[i-1] && used[i-1] == false){
                continue;
            }
            path.push_back(nums[i]);
            result.push_back(path);
            used[i] = true;
            backtracking(nums, i+1, used);
            used[i] = false;
            path.pop_back();
        }
    }

    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        vector<bool> used(nums.size(),false);
        sort(nums.begin(), nums.end());
        result.push_back(path);
        backtracking(nums, 0, used);
        return result;
    }
};

标签:return,nums,28,back,vector,子集,result,path,Day
From: https://www.cnblogs.com/GavinGYM/p/17077607.html

相关文章

  • 数学建模学习——Day04
    一、灰色关联分析1.基本思想:根据序列曲线几何形状的相似程度来判断其联系是否紧密。曲线越接近,相应序列之间的关联度就越大,反之就越小。2.应用1)进行系统分析: ·1.画......
  • day16
    1、104.二叉树的最大深度递归法二叉树的最大深度==》根节点的高度通过后序(左右中)求得根节点高度来求得二叉树最大深度。递归三要素确定递归函数的参数和返回值......
  • day14-JdbcTemplate-01
    JdbcTemplate-01看一个实际需求:如果希望使用spring框架做项目,Spring框架如何处理对数据库的操作呢?方案一:使用之前的JdbcUtils类方案二:spring提供了一个操作数据库(......
  • 2023.1.28~2023.1.30 日寄
    2023.1.28~2023.1.30猜猜看为什么会积压三天?看看前两天在干什么吧。一言(1.28)我会被音乐打动、被诗歌打动,如果有一天我不再被打动了,我就会死。你知道我的意思吗?被打动......
  • Linux学习-DAY6
    第4章Vim编辑器与Shell脚本命令1.Vim文本编辑器Vim编辑器中设置了3种模式—命令模式、末行模式和编辑模式,每种模式分别又支持多种不同的命令快捷键,这大大提高了工作效率,而......
  • drf项目 day01 入门
    一、web应用模式#前后端混合开发(前后端不分离):返回的是html的内容,需要写模板,就像是我们写bbs项目时创建的.html文件,在里面写Python代码#前后端分离:后端工程师只专注于写......
  • java day1
    如何判断+号是连接还是相加,如果有string类型就是连接;......
  • Day01 Markdown学习
    一级标题(一个)二级标题(两个)三级标题(三井号键)ctrl+(1~6)快捷标题加粗部分(两个星号)斜体部分(一个星号)斜体加粗(三个星号)删除线(两个波浪号)无序列表无序列表有序......
  • Integer 127 128
    publicclassTestInteger{publicstaticvoidmain(String[]args){//1.127--127范围内正确 Integerone=127;Integertwo=127......
  • 【算法训练营day31】LeetCode455. 分发饼干 LeetCode376. 摆动序列 LeetCode53. 最大
    LeetCode455.分发饼干题目链接:455.分发饼干独上高楼,望尽天涯贪心的思路,将每块饼干都发给最合适的孩子,那么最后分发饼干的策略就是最合适的,即可满足最多的孩子。class......