news 2026/4/15 5:40:59

代码随想录算法训练营第二十四天| 93、复原IP地址 78、子集 90、子集II

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
代码随想录算法训练营第二十四天| 93、复原IP地址 78、子集 90、子集II

目录

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

题目描述

解题思路

78. 子集

题目描述

解题思路

90. 子集 II

题目描述

解题思路


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

题目描述

  • 有效 IP 地址正好由四个整数(每个整数位于0255之间组成,且不能含有前导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 地址,返回所有可能的有效 IP 地址,这些地址可以通过在s中插入'.'来形成。你不能重新排序或删除s中的任何数字。你可以按任何顺序返回答案。

解题思路

  • 本题同131. 分割回文串,都是分割字符串,区别就在判断合法的逻辑,本题由于题目中给定所有字符均为数字,故只需要考虑区间在1~255和无无效前导零
  • 我的前导零判断逻辑是:该数为两位及两位以上,并且首位为0
class Solution: def restoreIpAddresses(self, s: str) -> List[str]: self.path = [] self.res = [] self.backtracking(s,0) return self.res def backtracking(self,s,start): if start >= len(s) and len(self.path) == 4: self.res.append('.'.join(self.path[:])) return for i in range(start,len(s)): if self.if_valid(s,start,i): self.path.append(s[start:i+1]) self.backtracking(s,i+1) self.path.pop() def if_valid(self,s,start,end): str_ = s[start:end+1] num = int(str_) if num < 0 or num > 255:return False if s[start] == '0' and end != start:return False return True

78. 子集

题目描述

  • 给你一个整数数组nums,数组中的元素互不相同。返回该数组所有可能的子集(幂集)。

  • 解集不能包含重复的子集。你可以按任意顺序返回解集。

解题思路

  • 将过程中收集的path都记录到res,path长度等于res时当前路径停止回溯
class Solution: def subsets(self, nums: List[int]) -> List[List[int]]: self.path = [] self.res = [[]] self.backtracking(nums,0) return self.res def backtracking(self,nums,start): if len(self.path) == len(nums): return for i in range(start,len(nums)): self.path.append(nums[i]) self.res.append(self.path[:]) self.backtracking(nums,i+1) self.path.pop()

90. 子集 II

题目描述

  • 给你一个整数数组nums,其中可能包含重复元素,请你返回该数组所有可能的 子集(幂集)。

  • 解集不能包含重复的子集。返回的解集中,子集可以按任意顺序排列。

解题思路

  • 本题类似于40. 组合总和 II,特别注意的是都要先进行排序,不然重复的元素就不在一起,结果有误
class Solution: def subsetsWithDup(self, nums: List[int]) -> List[List[int]]: self.path = [] self.res = [] self.used = [False] * len(nums) nums.sort() self.backtracking(nums,0) return self.res def backtracking(self,nums,start): self.res.append(self.path[:]) if len(self.path) == len(nums): return for i in range(start,len(nums)): if i > 0 and nums[i] == nums[i - 1] and self.used[i-1] == False: continue self.used[i] = True self.path.append(nums[i]) self.backtracking(nums,i+1) self.used[i] = False self.path.pop()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 5:37:10

Ostrakon-VL扫描终端惊艳效果:实时摄像头流中动态追踪商品

Ostrakon-VL扫描终端惊艳效果&#xff1a;实时摄像头流中动态追踪商品 1. 像素特工&#xff1a;零售场景的AI扫描革命 想象一下&#xff0c;当你走进一家超市&#xff0c;只需拿起手机对着货架一扫&#xff0c;所有商品信息瞬间呈现在眼前——这不是科幻电影&#xff0c;而是…

作者头像 李华
网站建设 2026/4/15 5:36:11

邓白氏编码加急:半天出码,先码后款!

想做海外生意&#xff1f;企业邓白氏编码没拿到&#xff0c;你可能连门都敲不开&#xff01;你以为注册个账号、填个邮箱就行&#xff1f;老外的规矩比你想的要多。最近好几个做跨境的朋友跟我吐槽&#xff1a;“明明公司资质齐全&#xff0c;怎么注册Google Play企业号就是通不…

作者头像 李华
网站建设 2026/4/15 5:28:10

2026年3月 GESP CCF编程能力等级认证Python六级真题

答案和更多内容请查看网站&#xff1a;【试卷中心 ----->电子学会 ----> Python ----> 六级】 网站链接 青少年软件编程历年真题模拟题实时更新 青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;六级&#xff09; 一、单选题 1. 202…

作者头像 李华
网站建设 2026/4/15 5:27:56

基于Anaconda的OFA图像英文描述模型开发环境搭建

基于Anaconda的OFA图像英文描述模型开发环境搭建 1. 环境准备与Anaconda安装 如果你还没安装Anaconda&#xff0c;先去官网下载适合你操作系统的版本。Windows用户直接运行exe安装包&#xff0c;Linux和Mac用户用命令行安装就行。安装过程很简单&#xff0c;基本上就是一路下…

作者头像 李华