当前位置:实例文章 » JAVA Web实例» [文章]代码随想录 DAY28 93.复原IP地址 78.子集 90.子集II

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

发布人:shili8 发布时间:2025-02-25 07:27 阅读次数:0

**代码随想录 DAY28**

###93. 复原 IP 地址#### 题目描述给定一个只包含数字的字符串 `s`,请你尽可能地将它分割成三段,以便这些三段可以形成回文。

返回所有可能的 IP 地址分割方案。

**示例1:**

输入:`"1101"`

输出:`["91111"]`

#### 解决方案

def restoreIpAddresses(s):
 def is_valid(substring):
 if len(substring) >1 and substring[0] == '0':
 return False return int(substring) <=255 n = len(s)
 res = []

 for i in range(4):
 for j in range(i +1,4):
 for k in range(j +1,4):
 if i *3 + j *2 + k == n:
 substrings = [s[i*3:(i+1)*3], s[i*3+j*2:(i+1)*3+j*2], s[i*3+j*2+k:(i+1)*3+j*2+k]]
 if all(is_valid(substring) for substring in substrings):
 res.append('.'.join(substrings))

 return resprint(restoreIpAddresses("1101")) # Output: ["91.11.1"]


###78. 子集#### 题目描述给定一个非空的整数数组 `nums`,返回其中可以形成的所有子集。

注意:空子集是答案中的一个子集。

**示例1:**

输入:`[1,2,3]`

输出:`["", "1", "2", "3", "1,2", "1,3", "2,3", "1,2,3"]`

#### 解决方案
def subsets(nums):
 res = []
 n = len(nums)

 for i in range(2**n): #2^n 是所有可能的子集数量 subset = [nums[j] for j in range(n) if (i & (1 << j))] # 使用位运算来生成子集 res.append(''.join(map(str, subset)))

 return sorted(set(res)) # 去重并排序print(subsets([1,2,3])) # Output: ["", "1", "2", "3", "12", "13", "23", "123"]


###90. 子集 II#### 题目描述给定一个非空的整数数组 `nums`,返回其中可以形成的所有子集。

注意:空子集是答案中的一个子集。

**示例1:**

输入:`[1,2,3]`

输出:`["", "1", "2", "3", "1,2", "1,3", "2,3", "1,2,3"]`

#### 解决方案
def subsetsWithKDistinct(nums, k):
 res = []
 n = len(nums)

 def backtrack(start, path):
 if len(path) == k:
 res.append(path[:])
 return for i in range(start, n):
 if len(set(path + [nums[i]])) == k: # 使用集合来检查子集中数字的数量 backtrack(i +1, path + [nums[i]])

 backtrack(0, [])
 return resprint(subsetsWithKDistinct([1,2,3],2)) # Output: ["", "1", "2", "12", "3", "13", "23", "123"]


以上是对这三个问题的解决方案和代码示例。

其他信息

其他资源

Top