代码训练营Day.28 | 93. 复原IP地址、78. 子集、90. 子集II

93. 复原IP地址

1. LeetCode链接

. - 力扣(LeetCode)

2. 题目描述

3. 解法

字符串切四刀,最后一刀必须是在末位。

麻烦的地方在于文本的各种限制条件、剪枝等等。

class Solution {
public:
    vector<string> results;
    string result;
    void backtracking(string& s, int start, int k) {
        if (start == s.size() && k == -1) {
            result.pop_back();
            results.push_back(result);
            result.push_back('.');
            return;
        }
        string ss;
        for (int i = start; i < s.size(); i++) {
            if (k == 0) { // 要是前三刀切完了,第四刀必须在末尾
                ss = s.substr(start, s.size() - start);
                i = s.size() - 1;
            }
            else ss = s.substr(start, i + 1 - start);
            if (ss[0] == '0' && ss.size() > 1) break; // 开头‘0’不合法,后面的也不用考虑
            if (ss.size() > 3) break; // size大于3,肯定>255,后面也不用考虑
            int num = stoi(ss);
            if (num > 255) break; // >255,后面也不用考虑了。
            result += ss;
            result.push_back('.');
            backtracking(s, i + 1, k - 1);
            result.erase(result.end() - ss.size() - 1, result.end());
        }
        return;
    }
    vector<string> restoreIpAddresses(string s) {
        backtracking(s, 0, 3);
        return results;
    }
};

该方法不太省空间。以下方法直接在s上操作,考虑将三个‘.’插在字符串的哪里。注意第三个点插在最后一位的情况。

class Solution {
public:
    vector<string> result;
    void backtracking(string& s, int pp, int start) {
        if (pp == 3) {
            if (isValid(s, start, s.size() - 1)) result.push_back(s);
            return;
        }
        for (int i = start; i < s.size(); i++) {
            if (isValid(s, start, i)) {
                s.insert(s.begin() + i + 1, '.');
                pp++;
                backtracking(s, pp, i + 2);
                pp--;
                s.erase(s.begin() + i + 1);
            } else break;
        }
    }
    bool isValid(string& s, int left, int right) {
        if (left > right) return false;  // 防止最后一位是‘.’
        if (s[left] == '0' && right > left) return false;
        if ((right - left) > 3) return false;
        int num = 0;
        for (int i = left; i <= right; i++) {
            if (s[i] > '9' || s[i] < '0') return false;
            num = num * 10 + (s[i] - '0');
            if (num > 255) return false;
        }
        return true;
    }
    vector<string> restoreIpAddresses(string s) {
        backtracking(s, 0, 0);
        return result;
    }
};

78. 子集

1. LeetCode链接

. - 力扣(LeetCode)

2. 题目描述

3. 解法

太简单了,就是组合但是不考虑长度,任何都能压入最终答案中。

class Solution {
public:
    vector<vector<int>> results;
    vector<int> result;
    void backtracking(vector<int>& nums, int start) {
        results.push_back(result);
        for (int i = start; i < nums.size(); i++) {
            result.push_back(nums[i]);
            backtracking(nums, i + 1);
            result.pop_back();
        }
        return;
    }
    vector<vector<int>> subsets(vector<int>& nums) {
        backtracking(nums, 0);
        return results;
    }
};

90. 子集II

1. LeetCode链接

90. 子集 II - 力扣(LeetCode)

2. 题目描述

3. 解法

有了重复元素,就不得不先排序了。

class Solution {
public:
    vector<vector<int>> results;
    vector<int> result;
    void backtracking(vector<int>& nums, int start) {
        results.push_back(result);
        for (int i = start; i < nums.size(); i++) {
            if (i > start && nums[i] == nums[i - 1]) continue;
            result.push_back(nums[i]);
            backtracking(nums, i + 1);
            result.pop_back();
        }
        return;
    }
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        backtracking(nums, 0);
        return results;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java基础 - 01 java集合框架概述以及Iterable接口和Collection简单介绍

最近在开发过程中&#xff0c;发现自己对java集合的了解已经忘得差不多了&#xff0c;作为开发者&#xff0c;这可不是一件好事哈&#xff0c;之前开始学习java基础的时候&#xff0c;学过一段时间的java集合&#xff0c;但是现在到了工作岗位上的时候&#xff0c;发现自己用到…

K8S部署GitLab

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

【数据结构】二叉树链式结构详解

目录 1.前言2.快速创建一颗二叉树3.二叉树的遍历3.1前序遍历3.2中序遍历3.3后序遍历3.4层序遍历 4.二叉树节点个数与高度4.1二叉树节点个数4.2二叉树叶子节点个数4.3二叉树高度4.4二叉树第k层节点个数4.5二叉树查找值为x的节点 5.二叉树的基础oj题练习6.二叉树的创建和销毁6.1通…

【⭐AI工具⭐】AI工具导航推荐

目录 零 工具导航&#x1f449;【[AI工具集导航](https://ai-bot.cn/)】&#x1f448;&#x1f449;【[iForAI](https://iforai.com/)】&#x1f448;&#x1f449;【[AInav](https://www.ainav.cn/)】&#x1f448;&#x1f449;【[Navi AI 导航](https://www.naviai.cn/)】&a…

PhpPythonC++圆类的实现(OOP)

哎......被投诉了 &#x1f62d;&#x1f62d;&#x1f62d;&#x1f62d;&#x1f62d; 其实也不是小编不更&#xff0c;这不是期末了吗&#xff08;zhaojiekou~~&#xff09;&#xff0c;而且最近学的信息收集和ctf感觉好像没找到啥能更的&#xff08;不过最经还是在考虑更一…

Flink CDC使用

Flink 环境准备 Flink 版本对应的CDC版本 两个jar包上传到flink bin目录下 flink-sql-connector-mysql-cdc mysql-connector-java 重启Flink集群

体系结构汇总复习(练习题)

1.MSI cache一致性协议问题 题解引用自&#xff1a;MSI cache一致性协议_假设在一个双cpu多处理器系统中,两个cpu用单总线连接,并且采用监听一致性协议(msi-CSDN博客 答&#xff1a; 事件A状态B状态初始状态IICPU A读SICPU A写MICPU B写IMCPU A读SS 接下来分析CPU A/B中各自c…

【Verilog】运算符

系列文章 数值&#xff08;整数&#xff0c;实数&#xff0c;字符串&#xff09;与数据类型&#xff08;wire、reg、mem、parameter&#xff09; 系列文章算术运算符关系运算符相等关系运算符逻辑运算符按位运算符归约运算符移位运算符条件运算符连接和复制运算符 算术运算符 …

React 入门 - 05(响应式与事件绑定)

本章内容 目录 一、响应式设计思想二、React 中的事件绑定 继上一节我们简单实现一个 TodoList来更加了解编写组件的一些细节。本节继续这个案例功能的完成。 一、响应式设计思想 1、在原生的 JS中&#xff0c;如果要实现点击”提交“按钮就将输入框的内容添加至页面列表中&…

【OpenVINO】 使用 OpenVINO CSharp API 部署 PaddleOCR 项目介绍

前言&#xff1a; 在之前的项目中&#xff0c;我们已经使用 OpenVINO TM CSharp API 部署 PaddleOCR 全系列模型&#xff0c;但随着PaddleOCRv4版本发布以及OpenVINO CSharp API版本迭代&#xff0c;上一版本的项目已经不再适用。因此在推出的最新项目中&#xff0c;已经完成了…

6款实用的Git可视化管理工具

前言 俗话说得好“工欲善其事&#xff0c;必先利其器”&#xff0c;合理的选择和使用可视化的管理工具可以降低技术入门和使用门槛。我们在团队开发中统一某个开发工具能够降低沟通成本&#xff0c;提高协作效率。今天给大家分享6款实用的Git可视化管理工具。 Git是什么&…

QT基础篇(1)QT概述

1.什么是QT QT是一个跨平台的C应用程序开发框架。它提供了一套丰富的图形用户界面&#xff08;GUI&#xff09;和多媒体功能&#xff0c;可以用于开发各种类型的应用程序&#xff0c;包括桌面应用程序、移动应用程序和嵌入式系统。QT具有易于使用、可定制性强、性能高等特点&a…

DelayQueue原理探究

DelayQueue并发队列是一个无界阻塞延迟队列&#xff0c;队列中的每个元素都有个过期时间&#xff0c;当从队列获取元素时&#xff0c;只有过期元素才会出队列。队列头元素是最快要过期的元素。 DelayQueue类图结构 由该图可知&#xff0c;DelayQueue内部使用PriorityQueue存放…

doris部署

doris-2.0.1.1部署安装 一、下载doris安装包二、解压到/data下&#xff0c;修改名称三、修改fe配置文件四、启动doris-fe五、验证doris-fe六、修改be配置文件七、启动doris-be八、mysql中连接be&#xff0c;在Doris中添加后端节点九、设置密码 一、下载doris安装包 wget https…

腾讯云优惠券是什么?2024年如何领取优惠券?

腾讯云优惠券是腾讯云平台提供的一种优惠方式&#xff0c;用户可以通过领取并使用优惠券&#xff0c;享受一定的折扣优惠。这些优惠券适用于腾讯云的各类产品&#xff0c;包括云服务器、数据库、CDN等&#xff0c;帮助用户降低购买成本&#xff0c;提高使用体验。 在2024年&…

软件测试|Django 入门:构建Python Web应用的全面指南

引言 Django 是一个强大的Python Web框架&#xff0c;它以快速开发和高度可扩展性而闻名。本文将带您深入了解Django的基本概念和核心功能&#xff0c;帮助您从零开始构建一个简单的Web应用。 什么是Django&#xff1f; Django 是一个基于MVC&#xff08;模型-视图-控制器&a…

11.11上课笔记

1.字符串 1.字符串是基本数据类型&#xff1a; "字符串" 字符串字符串str(字符串) #创建或者转换其他类型的字符串 a.获取长度&#xff1a;len&#xff08;字符串&#xff09; b.字符串是一个有序的数列&#xff08;sequence&#xff09;&#xff0c;也是一个可迭…

Edge浏览器停止更新方法之一(一分钟版)

一分钟时间停止器 开整原理效果步骤 结尾 开整 原理 通过限制window管理员的权限&#xff0c;禁止了更新程序的写入和读取&#xff0c;自然就更新不了了 效果 步骤 对着Edge浏览器图标右键&#xff0c;点击“打开文件所在位置” 到这级目录&#xff0c;然后往回退两级找到…

二进制部署

HOST HostnameIP地址flannedAPPmaster192.169.116.10ETCD\APIserver\Scheduler\Controller-Managernode1192.168.116.11172.17.28.0ETCD,Flanned,Kubelet,kube-proxynode2192.168.116.12172.17.26.0ETCD,Flanned,Kubelet,kube-proxy Kubernetes社区 Kubernetes文档 ETCD mas…

最新ThinkPHP版本实现证书查询系统,实现批量数据导入,自动生成电子证书

前提&#xff1a;朋友弄了一个培训机构&#xff0c;培训考试合格后&#xff0c;给发证书&#xff0c;需要一个证书查询系统。委托我给弄一个&#xff0c;花了几个晚上给写的证书查询系统。 实现功能&#xff1a; 前端按照姓名手机号码进行证书查询证书信息展示证书展示&#x…