代码随想录训练营第二十四天 78子集 90子集II

第一题:

原题链接:78. 子集 - 力扣(LeetCode)

思路:

本题很简单,就是在每次遍历的地方都要搜集结果。

终止条件:当前要收集的起始位置已经大于等于数组的大小的时候证明已经搜集到完成了。

代码如下:

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

第二题:

原题链接:90. 子集 II - 力扣(LeetCode)

思路:

本题和子集很相似,但是要注意的是本题有重复的元素,但是结果中不能包含重复的子集。

和之前的一道题很相似40. 组合总和 II - 力扣(LeetCode),都是树层和树枝去重的逻辑。

用一个bool类型的数据来记录当前元素是否被遍历过。

carl说也可以不用使用bool类型的数组记录,因为递归的时候下一个startIndex是i+1而不是0。如果要是全排列的话,每次要从0开始遍历,为了跳过已入栈的元素,需要使用used。

这题一开始要进行排序才行。

代码如下:

class Solution {
public:vector<vector<int>> subsetsWithDup(vector<int>& nums) {vector<bool> used(nums.size(), false);sort(nums.begin(), nums.end());backtracking(nums, 0, used);return res;}
private:vector<vector<int>> res;vector<int> path;void backtracking(vector<int>& nums, int startIndex, vector<bool> used){res.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;backtracking(nums, i + 1, used);used[i] = false;path.pop_back();}}
};

第三题:

原题链接:93. 复原 IP 地址 - 力扣(LeetCode)

思路:

终止条件:

用一个count值来记录当前遍历到IP地址的第几个字段了,如果当前已经遍历到第三个字段的时候,就需要考虑剩下的字符是否符合要求,如果符合要求的话就将剩下的结果添加到path中,如何将path添加到res结果数组中。接下来是重点,这里需要回溯,我因为没有回溯出现了很大的问题。

在for循环中就是判断当前截取的字符串是否符合要求,如果符合要求的话就将该字符串添加到path路径中同时添加一个“.”,然后count++;接着就是递归加回溯。

回溯的话要注意pop掉你添加进去的,不能只pop一次。

在判断是否符合IP字段要求的函数中需要注意,有一个@字符需要判断。然后用sum来记录所有当前字段的int值并进行判断。我使用stoi函数失败了。

代码如下:

class Solution {
public:vector<string> restoreIpAddresses(string s) {backtracking(s, 0, 0);return res;}
private:vector<string> res;string path;void backtracking(string s, int startIndex, int count){if(count == 3){if(isIP(s, startIndex, s.size() - 1)){path += s.substr(startIndex, s.size() - 1 - startIndex + 1);res.push_back(path);// 回溯for(int i = 0; i < s.size() - startIndex; i++) {path.pop_back();}return;return;}}for(int i = startIndex; i < s.size(); i++){if(isIP(s, startIndex, i)){string st = s.substr(startIndex, i - startIndex + 1);int size = st.size();path += st;path += ".";count += 1;backtracking(s, i + 1, count);count -= 1;path.pop_back();while(size){path.pop_back();size--;}}}}bool isIP(const string& s, int start, int end){if(start > end) return false;if(start != end && s[start] == '0') return false;int sum = 0;for(int i = start; i <= end; i++){if(s[i] == '@')return false;else{sum = sum * 10 + (s[i] - '0');}if(sum > 255){return false;}}return true;}
};

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

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

相关文章

Foxit Reader(福昕阅读器)详细安装和使用教程

第一部分&#xff1a;Foxit Reader简介和基本信息 1.1 什么是Foxit Reader&#xff1f; Foxit Reader&#xff08;福昕阅读器&#xff09;是一款功能强大的PDF阅读和编辑软件&#xff0c;以其快速、轻巧和丰富的功能而闻名。它不仅支持常规的PDF阅读功能&#xff0c;还提供了…

LeetCode刷题之HOT100之最大正方形

今天下起了暴雨&#xff0c;本以为下午就可以结束的答辩又因为老师开会被推迟。研三的学长走了后我们开始了0元购&#xff0c;收获颇丰哈哈&#xff0c;做个题 1、题目描述 2、算法分析 给定一个矩形&#xff0c;要求最大正方形。第一次见这种题目哈 2024 6/30 嘿嘿&#xff…

实体零售连锁企业如何通过物流接口实现数智化转型升级?

在电子商务浪潮的持续冲击下&#xff0c;传统的实体零售行业面临着巨大的挑战。为了在线上线下融合的新零售时代保持竞争力&#xff0c;众多实体零售企业积极寻求数字化转型的突破。 某中国零售连锁百强企业近年来致力于打造自有品牌的线上销售体系&#xff0c;自2021年8月起接…

深入解析 gRPC 的重连机制

目录 什么是 gRPC 重连机制 gRPC 重连策略 gRPC 重连参数 gRPC 重连机制原理 重连机制的注意事项 小结 gRPC 的重连机制是确保客户端在连接断开后能够自动重新连接到服务器的一种机制&#xff0c;对于分布式系统和微服务架构中的高可用性和容错性至关重要。 什么是 gRPC…

Python数据分析-风湿关节炎生存分析

一、研究背景和意义 类风湿关节炎&#xff08;RA&#xff09;是一种慢性炎症性疾病&#xff0c;主要影响关节&#xff0c;但也可能影响身体的其他部分。RA的病因尚不完全清楚&#xff0c;但已知其涉及免疫系统的异常反应。患者的免疫系统错误地攻击自身的关节组织&#xff0c;…

HCIA4.9-4.19笔记

通讯——双向的&#xff0c;必须保证有来有回才能成功。 当拓扑图中的所有路由器拥有拓扑图中的所有网段时&#xff0c;即可实现全网通。 路由器获取位置网段的方法 静态路由 由管理员手写的路由条目 动态路由 所有路由器上运行同一种动态路由协议&#xff0c;之后通过路…

Python 3 注释

Python 3 注释 在编程中,注释是一种用于解释代码和提供上下文的方式,它对代码的执行没有影响。Python 3 支持多种类型的注释,包括单行注释和多行注释。注释对于提高代码的可读性和维护性非常重要,特别是在团队合作和大型项目中。 单行注释 单行注释以井号(#)开头,用于…

C++ 成员模板类

#include <iostream> // 包含头文件。 using namespace std; // 指定缺省的命名空间。template<class T1, class T2> class AA // 类模板AA。 { public:T1 m_x;T2 m_y;AA(const T1 x, const T2 y) : m_x(x), m_y(y) {}void show() { c…

Python 学习之简单的程序(三)

编写简单的Python程序是巩固基础的好方法。下面我将给出几个简单的Python程序示例&#xff0c;涵盖了基本的数据类型、控制流、函数和文件操作。 示例1&#xff1a;Hello, World! 这是最简单的Python程序&#xff0c;用于打印出 "Hello, World!"。 print("He…

初学者指南:如何选择嵌入式Linux和单片机(MCU)

前言 在嵌入式系统开发领域&#xff0c;选择合适的平台是项目成功的关键之一。对于初学者来说&#xff0c;如何在嵌入式Linux和单片机&#xff08;MCU&#xff09;之间做出选择可能是一项艰巨的任务。本文将详细解释这两种平台的特点、优缺点&#xff0c;以及在不同应用场景中…

低代码表单配置平台替代普通表单配置平台,前端部分重构的设计和思路

前言 最近将公司的旧表单配置平台重构为低代码表单配置平台&#xff0c;这里记录一下这个过程的设计和思路&#xff0c;不涉及具体的代码&#xff1b;另外这篇文章基本只涉及前端部分&#xff0c;也不涉及与后端数据交互部分。 需求 固化的表单配置平台 -> 灵活的表单配置…

TreeMap 和 TreeSet 的基本情况、特性以及使用场景,并对比它们与 HashMap 和 HashSet

TreeMap 基本情况 实现&#xff1a;基于红黑树实现的 NavigableMap。排序&#xff1a;键按自然顺序或自定义顺序&#xff08;通过 Comparator&#xff09;排序。特性&#xff1a; 不允许 null 键&#xff0c;但允许 null 值。保证键有序。迭代时按排序顺序。复杂度&#xff1…

【最长公共前缀 动态规划】2430. 对字母串可执行的最大删除数

如果有不明白的&#xff0c;请加文末QQ群。 本文涉及知识点 最长公共前缀 动态规划 动态规划汇总 LeetCode 2430. 对字母串可执行的最大删除数 给你一个仅由小写英文字母组成的字符串 s 。在一步操作中&#xff0c;你可以&#xff1a; 删除 整个字符串 s &#xff0c;或者 …

vscode中的字符缩进问题

问题描述&#xff1a; 如图当一行代码中出现不同类型的字符时&#xff0c;使用tab缩只是插入了固定数量&#xff08;默认4&#xff09;的空格或制表符&#xff0c;仍然无法对齐。 解决方法&#xff1a; vscode找到设置&#xff0c;搜索fontFamily&#xff0c;对应输入框写入mon…

Linux系统编程--进程间通信

目录 1. 介绍 1.1 进程间通信的目的 1.2 进程间通信的分类 2. 管道 2.1 什么是管道 2.2 匿名管道 2.2.1 接口 2.2.2 步骤--以父子进程通信为例 2.2.3 站在文件描述符角度-深度理解 2.2.4 管道代码 2.2.5 读写特征 2.2.6 管道特征 2.3 命名管道 2.3.1 接口 2.3.2…

集成平台建设方案(Doc原件)

基础支撑平台作为系统总体架构的核心&#xff0c;不仅要促进与各应用子系统和第三方系统的顺畅交互&#xff0c;还需确保内部业务在该平台上能够灵活扩展。针对这一需求&#xff0c;我们对基础支撑平台提出了以下要求&#xff1a; (1) 平台需基于其基础架构&#xff0c;为多源异…

python基础:设置代码格式

随着编写的程序越来越长&#xff0c;有必要了解一些代码格式的约定&#xff0c;让你的代码尽可以能易于阅读。 python代码编写规范为PEP8&#xff0c;有兴趣的朋友可以下载观看&#xff0c;这里仅作简要说明。 1、缩进 PEP8建议每级缩进都使用4个空格。多数情况下编程语言的…

vscode-创建vue3项目-修改暗黑主题-常见错误-element插件标签-用法涉及问题

文章目录 1.vscode创建运行编译vue3项目2.添加项目资源3.添加element-plus元素4.修改为暗黑主题4.1.在main.js主文件中引入暗黑样式4.2.添加自定义样式文件4.3.html页面html标签添加样式 5.常见错误5.1.未使用变量5.2.关闭typescript检查5.3.调试器支持5.4.允许未到达代码和未定…

UE5的安装与基本操作(一)

文章目录 前言安装UE5新建第一个游戏项目基本游览方式对目标进行变换各种变换对齐 快速定位目标 总结 前言 Unreal Engine 5 (UE5) 是一款由 Epic Games 开发的实时 3D 创作平台&#xff0c;用于制作游戏、电影、动画、建筑可视化和其他类型的交互式体验。UE5 提供了一系列强大…

Flutter第十五弹 Flutter插件

目标&#xff1a; 1.Flutter插件是什么&#xff1f;有什么作用&#xff1f; 插件 (plugin) 是 package 的一种&#xff0c;全称是 plugin package&#xff0c;我们简称为 plugin&#xff0c;中文叫插件。 2.怎么创建Flutter插件&#xff1f; 一、什么是插件 在flutter中&am…