代码随想录第24天|回溯part4 寻找切割点

93.复原ip地址

在这里插入图片描述
寻找切割点,但是需要注意的是,切割点(即.号)只有三个
将需要拼凑的值先放进一个数组里,等满足条件后再将其拼成字符串

class Solution {
public:vector<string> res;vector<int> path;int check(string s) {if (s.size() > 1 && s[0] == '0')return -1;if (s.size() == 0)return -1;int sum = 0;for (int i = 0; i < s.size(); i++) {if (s[i] > '9' || s[i] < '0')return -1;sum = sum * 10 + s[i] - '0';if (sum > 255)return -1;}return sum;}void backTracking(string s, int step, int dotNum) {if (dotNum == 0) {string temp = s.substr(step, s.size() - step);int t = check(temp);if (t == -1)return;path.push_back(t);string r = to_string(path[0]);for (int i = 1; i < path.size(); i++) {r = r + "." + to_string(path[i]);}res.push_back(r);path.pop_back();return;}for (int i = step; i < s.size(); i++) {string temp = s.substr(step, i - step + 1);int t = check(temp);if (t == -1)break;path.push_back(t);backTracking(s, i + 1, dotNum - 1);path.pop_back();}}vector<string> restoreIpAddresses(string s) {backTracking(s, 0, 3);return res;}
};

go代码

var (res  []stringpath []int
)func check(s string) int {if len(s) > 1 && s[0] == '0' {return -1}if len(s) == 0 {return -1}sum := 0for i := 0; i < len(s); i++ {if s[i] > '9' || s[i] < '0' {return -1}sum = sum*10 + int(s[i]-'0')if sum > 255 {return -1}}return sum
}
func backTracking(s string, step int, dotNum int) {if dotNum == 0 {var temp string = s[step:]t := check(temp)if t == -1 {return}path = append(path, t)r := strconv.Itoa(path[0])for i := 1; i < len(path); i++ {r += "." + strconv.Itoa(path[i])}res = append(res, r)path = path[:len(path)-1]return}for i := step; i < len(s); i++ {temp := s[step : i+1]t := check(temp)if t == -1 {break}path = append(path, t)backTracking(s, i+1, dotNum-1)path = path[:len(path)-1]}
}
func restoreIpAddresses(s string) []string {res = []string{}path = []int{}backTracking(s, 0, 3)return res
}

78.子集

在这里插入图片描述

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

go语言

var (res  [][]intpath []int
)func backTracking(nums []int, step int) {p := make([]int, len(path))copy(p, path)res = append(res, p)if step >= len(nums) {return}for i := step; i < len(nums); i++ {path = append(path, nums[i])backTracking(nums, i+1)path = path[:len(path)-1]}
}
func subsets(nums []int) [][]int {res = [][]int{}path = []int{}backTracking(nums, 0)return res
}

90.子集II

在这里插入图片描述
和之前的题目一样,需要先排序,然后去重
去重可以用used数组,也可以用step来去重
使用used数组:

class Solution {
public:vector<int> path;vector<vector<int>> res;void backTracking(vector<int>& nums, int step,vector<bool>& used) {res.push_back(path);if (step >= nums.size())return;for (int i = step; i < nums.size(); i++) {if(i > 0 && used[i-1] == false && nums[i] == nums[i-1]) continue;used[i] = true;path.push_back(nums[i]);backTracking(nums,i+1,used);used[i] = false;path.pop_back();}}vector<vector<int>> subsetsWithDup(vector<int>& nums) {sort(nums.begin(), nums.end());vector<bool> used(nums.size(),false);backTracking(nums,0,used);return res;}
};

直接使用step去重,只不过判断的逻辑需要变动一下,这样可以保证在同一树层里不使用相同的数

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

下面给上go代码:

var (res  [][]intpath []int
)func backTracking(nums []int, step int) {p := make([]int, len(path))copy(p, path)res = append(res, p)if step >= len(nums) {return}for i := step; i < len(nums); i++ {if i > step && nums[i] == nums[i-1] {continue}path = append(path, nums[i])backTracking(nums, i+1)path = path[:len(path)-1]}
}
func subsetsWithDup(nums []int) [][]int {res = [][]int{}path = []int{}sort.Ints(nums)backTracking(nums, 0)return res
}

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

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

相关文章

opencv-python(五)

opencv的颜色通道中顺序是B&#xff0c;G&#xff0c;R。 图像属性 import cv2img cv2.imread(jk.jpg) print(fshape{img.shape}) print(fsize{img.size}) print(fdtype{img.dtype}) shape&#xff1a;图像像素的行&#xff0c;列&#xff0c;通道 size&#xff1a;行数 X …

用贪心算法计算十进制数转二进制数(整数部分)

十进制整数转二进制数用什么方法&#xff1f;网上一搜&#xff0c;大部分答案都是用短除法&#xff0c;也就是除2反向取余法。这种方法是最基本最常用的&#xff0c;但是计算步骤多&#xff0c;还容易出错&#xff0c;那么还有没有其他更好的方法吗&#xff1f; 一、短除反向取…

WMS仓储管理系统高效驱动制造企业物料管理

在现代制造业的快速发展中&#xff0c;仓储管理作为供应链的核心环节&#xff0c;其效率直接影响到企业的生产力和市场竞争力。随着科技的进步&#xff0c;实施WMS仓储管理系统逐渐成为推动仓储管理向智能化转型的关键力量。本文将深入探讨WMS仓储管理系统如何以创新的方式驱动…

软件系统测试的定义和测试内容介绍

一、什么是软件系统测试? 软件系统测试是指对软件系统的功能、性能、可靠性、稳定性等方面进行全面检查和验证的过程。其目的是发现潜在的问题、缺陷和风险&#xff0c;并确保软件系统的质量和稳定性。 软件系统测试可以分为多个阶段&#xff0c;包括单元测试、集成测试、系…

OBS插件--Spout输入与输出

Spout是什么&#xff1f; Spout是用于Microsoft Windows的视频帧共享系统,它允许应用程序以类似于Mac上的Syphon的方式共享OpenGL纹理。 其主要目的是允许应用程序实时共享帧&#xff0c;而无需显著的性能开销。这一功能在多个领域有着广泛的应用&#xff0c;尤其是在实时视频…

【python】成功解决“TypeError: not enough arguments for format string”错误的全面指南

成功解决“TypeError: not enough arguments for format string”错误的全面指南 一、引言 在Python编程中&#xff0c;TypeError: not enough arguments for format string错误是一个常见的字符串格式化问题。这个错误通常发生在使用str.format()方法时&#xff0c;提供的参数…

【DMG80480T070_05WTR】文本显示、数据变量显示、基本图形显示、实时曲线功能及串口下载流程(串口屏)

这篇文章写给自己看的&#xff0c;要不然明天就忘完了。 首先新建一个工程&#xff0c;名称路径自拟。 导入一张图片&#xff0c;名字从00开始&#xff0c;图片放到本工程的DWIN_SET下面就行&#xff0c;后面如果没有特殊说明&#xff0c;生成的配置或者放入的图片全都放在该文…

三种常见的报表模板,省时又方便

前言 在业务应用和数据分析中&#xff0c;报表是一种常见的数据展示形式&#xff0c;可以帮助用户更直观地理解和解读数据。然而&#xff0c;每次创建和设计一款报表都需要花费大量的时间和精力。为了提高报表设计的效率&#xff0c;本文小编以葡萄城公司的嵌入式BI工具——Wy…

什么样的人适合成为产品经理

产品经理就好比是大楼的设计师&#xff0c;如果没有好的设计理念&#xff0c;好的洞察力&#xff0c;很难设计出让住户心满意足的房子。产品经理也是如此。 01要有创新思维和敏锐商业洞察力 做了很长时间的产品经理了&#xff0c;发现大部分产品经理基本上都是墨守成规&#…

AI写代码:我用kimi生成了一个设备节点监控网站,完美实现功能

更多精彩内容在公众号。 这一次继续用kimi来完成一个网站的初步搭建。这次是用来搭建一个节点监控网站。需求是通过输入节点Ip地址&#xff0c;用户名&#xff0c;密码得到远端节点的IP&#xff0c;CPU信息&#xff0c;内存信息&#xff0c;硬盘信息&#xff0c;网络收发包信息…

【Node】node的Events模块(事件模块)的介绍和使用

文章目录 简言EventsPassing arguments and this to listeners 向监听器传递参数Asynchronous vs. synchronous 异步和同步Handling events only once 只一次处理事件Error events 错误事件Capture rejections of promises 捕捉拒绝承诺的情况Class: EventEmitter 事件类Event:…

神经网络是什么?有什么作用?

人工智能是当前的热门科技领域&#xff0c;在自动驾驶、金融服务、智能家居、零售和电商、工业制造、医疗领域、教育领域、交通领域、娱乐领域、能源管理、农业、航空航天等很多领域都有越来越多的应用。 发展人工智能&#xff0c;离不开算力&#xff08;芯片&#xff09;、算…

单实例11.2.0.4迁移到11.2.0.4RAC_使用rman异机恢复

保命法则&#xff1a;先备份再操作&#xff0c;磁盘空间紧张无法备份就让满足&#xff0c;给自己留退路。 场景说明&#xff1a; 1.本文档的环境为同平台、不同版本&#xff08;操作系统版本可以不同&#xff0c;数据库版本相同&#xff09;&#xff0c;源机器和目标机器部分…

语雀使用指南

语雀使用指南 语雀什么是语雀注册知识库新建文档新建表格 使用感受 语雀 在介绍语雀之前&#xff0c;首先来说一下什么是语雀&#xff1f; 什么是语雀 语雀的官方文档定义是这么说的&#xff1a;「语雀」是一个「专业的云端知识库」&#xff0c;孵化自 蚂蚁集团 &#xff0c…

迎七一党史知识竞赛答题怎么做

迎七一党史知识竞赛答题&#xff0c;不仅是对于党史知识的检验&#xff0c;更是对于参赛者学习态度和综合能力的考量。在参与这类竞赛时&#xff0c;我们需要做好充分的准备&#xff0c;掌握一定的答题技巧&#xff0c;才能取得好的成绩。 首先&#xff0c;我们要深入了解竞赛…

【LeetCode】38.外观数列

外观数列 题目描述&#xff1a; 「外观数列」是一个数位字符串序列&#xff0c;由递归公式定义&#xff1a; countAndSay(1) "1"countAndSay(n) 是 countAndSay(n-1) 的行程长度编码。 行程长度编码&#xff08;RLE&#xff09;是一种字符串压缩方法&#xff0c…

【python】修改目标检测的xml标签(VOC)类别名

需求&#xff1a; 在集成多个数据集一同训练时&#xff0c;可能会存在不同数据集针对同一种目标有不同的类名&#xff0c;可以通过python脚本修改数据内的类名映射&#xff0c;实现统一数据集标签名的目的。 代码&#xff1a; # -*- coding: utf-8 -*- # Time : 2023/9/11 1…

SOLIDWORKS教育版:提供学生所需的资源

SOLIDWORKS教育版是一款专为学生和教育工作者设计的3D CAD软件&#xff0c;它拥有强大的设计功能和用户友好的界面&#xff0c;让你轻松实现创新设计的梦想。这款软件不仅提供了丰富的教程和案例&#xff0c;还为学生提供了各种学习资源和支持&#xff0c;让你在学习的道路上不…

Python程序设计 身份证号的奥秘

第1关&#xff1a;判断性别 通过身份证的第17位也就是倒数第二位的数字可以辨别该身份证所属人的性别,奇数为男性,偶数为女性。 任务&#xff1a;输入身份证号&#xff0c;第17位若是偶数&#xff0c;输出男性&#xff0c;否则输出女性 如何截取字符串的一个字符 如何判断一个…

数据持久化第七课-URL重写与Ajax

数据持久化第七课-URL重写与Ajax 一.预习笔记 1.URL重写(对网页地址进行保护) 首先编写module,实现对网络地址的处理 其次就是module的配置 最后验证url重写技术 2.Ajax数据交互 编写后端响应数据 处理跨域的配置问题 运行项目得到后端响应数据的地址 编写前端ajax进行数据请…