代码随想录23| 93.复原IP地址, 78.子集, 90.子集II

这篇具有很好参考价值的文章主要介绍了代码随想录23| 93.复原IP地址, 78.子集, 90.子集II。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

93.复原IP地址

题目链接/文章讲解:链接地址
视频讲解:链接地址

class Solution {
private:
    vector<string> result;
    void back_tracking(string& s, int startIndex, int pointNum) {
        //结束条件
        if (pointNum == 3) {
            if (isValid(s, startIndex, s.size() - 1)) {
                result.push_back(s);
            }
            return;
        }
        
        for (int i = startIndex; i < s.size(); i++) {
            if (isValid(s, startIndex, i)) {
                s.insert(s.begin() + i + 1, '.');
                pointNum++;
                back_tracking(s, i + 2, pointNum);// 插入了‘.’
                pointNum--;                         // 回溯
                s.erase(s.begin() + i + 1); 
            } else break;
        }
    }

    bool isValid(const string& s, int start, int end) {
        if  (start > end) {
            return false;
        }

        //首字母为0
        if (s[start] == '0' && start != end) {
            return false;
        }
        //非数字
        int nums = 0;
        for (int i = start; i <= end; i++) { // 这里是start
            if (s[i] > '9' || s[i] < '0') {
                return false;
            }

            nums = 10 * nums + (s[i] - '0');
            if (nums > 255) {
                return false;
            }
        }
        return true;
    }
public:
    vector<string> restoreIpAddresses(string s) {
        // if (s.size() < 4 || s.size() > 12) return result; 
        back_tracking(s, 0, 0);
        return result;
    }
};

78.子集

题目链接/文章讲解:链接地址
视频讲解:链接地址

class Solution {
private:
    vector<int> path;
    vector<vector<int>> result;
    void back_tracking(vector<int>& nums, int startIndex) {
        result.push_back(path);
        if (startIndex >= nums.size())
            return;

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


    }

public:
    vector<vector<int>> subsets(vector<int>& nums) {
        back_tracking(nums, 0);
        return result;
    }
};

90.子集II

题目链接/文章讲解:链接地址
视频讲解:链接地址文章来源地址https://www.toymoban.com/news/detail-667971.html

class Solution {
private:
    vector<vector<int>> result;
    vector<int> path;
    void back_tracking(vector<int>& nums, int startIndex, vector<bool>& used) {
        result.push_back(path);
        for (int i = startIndex; i < nums.size(); i++) {
            if (i > 0 && nums[i] == nums[i - 1] && used[i - 1] == false) {
                continue;
            }
            path.push_back(nums[i]);
            used[i] = true;
            back_tracking(nums, i + 1, used);
            used[i] = false;
            path.pop_back();
        }
    }


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

到了这里,关于代码随想录23| 93.复原IP地址, 78.子集, 90.子集II的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 93. 复原 IP 地址 - 力扣(LeetCode)

    题目描述 有效 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 地址。 给定一个只包含数字的字符

    2024年01月23日
    浏览(32)
  • leetcode做题笔记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 地址。 给定一个只包含数字的字

    2024年02月12日
    浏览(31)
  • 力扣每日一题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 地址。 给定一个只包含数字的字

    2024年02月06日
    浏览(29)
  • 算法leetcode|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 地

    2024年02月04日
    浏览(29)
  • 第23天-代码随想录刷题训练-第六章 ● 669. 修剪二叉搜索树 ● 108.将有序数组转换为二叉搜索树 ● 538.把二叉搜索树转换为累加树

    - LeetCode 链接 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。 修剪树不应该改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在唯一的答案

    2024年02月05日
    浏览(30)
  • LeetCode_回溯_中等_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 ,用以

    2024年02月02日
    浏览(43)
  • 代码随想录——回溯

    代码随想录——回溯 回溯的本质就是递归遍历,但在完成某一条路之后会撤回到上一层,然后重新选择另一条路继续遍历,是一个比较低效的算法,能进行提升的方式就是剪枝。 组合 链接:https://leetcode.cn/problems/combinations/description/ vectorvector int 作为最终返回的结果,vector

    2024年01月19日
    浏览(33)
  • [代码随想录]二叉树

    二叉树可以链式存储,也可以顺序存储。 那么链式存储方式就用指针, 顺序存储的方式就是用数组。 顾名思义就是顺序存储的元素在内存是连续分布的,而链式存储则是通过指针把分布在各个地址的节点串联一起。 链式存储如图: 链式存储是大家很熟悉的一种方式,那么

    2024年02月03日
    浏览(42)
  • 代码随想录 图论

    目录 797.所有可能得路径  200.岛屿数量 695.岛屿的最大面积 1020.飞地的数量  130.被围绕的区域  417.太平洋大西洋水流问题  827.最大人工岛 127.单词接龙  841.钥匙和房间 463.岛屿的周长  797. 所有可能的路径 中等 给你一个有  n  个节点的  有向无环图(DAG) ,请你找出所有从

    2024年04月10日
    浏览(34)
  • 代码随想录 - 链表

    链表是一种通过指针串联的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。 链表的类型  1、单链表  单链表中的指针域只能指向节点的下一个节点。  2、双链表 双链表:

    2024年02月13日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包