93. 复原 IP 地址
题目
有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 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 中的任何数字。你可以按 任何 顺序返回答案。
solution
lzx自己写的 小狗拍手!!!!!!!
class Solution:
def __init__(self):
self.res=[]
self.path=[]
def backtracking(self,s,startindex,curlen): #表示当前已经有几段分割了,一个合法的ip地址只有4段分割
print(self.res,self.path,curlen)
if curlen>4:return
if curlen==4:
if len(".".join(self.path[:]))==len(s)+3:
self.res.append(".".join(self.path[:]))
return
for i in range(startindex,len(s)):
temp=int(s[startindex:i+1])
if len(s[startindex:i+1])>1 and s[startindex:i+1][0]=='0':continue #这里不要写成0,是‘0’
elif temp>=0 and temp<=255:
curlen+=1
self.path.append("".join(s[startindex:i+1]))
self.backtracking(s,i+1,curlen)
curlen-=1
self.path.pop()
else:continue
return
def restoreIpAddresses(self, s: str) -> List[str]:
self.backtracking(s,0,0)
return self.res
78 子集
题目
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
solution
又是lzx自己写的 小狗拍手!!!!!!!
class Solution:
def __init__(self):
self.res=[[]]
self.path=[]
def backtracking(self,nums,startindex):
if self.path and len(self.path)<=len(nums):
self.res.append(self.path[:])
#return #收集结果这里不能return 因为还需要往下遍历
for i in range(startindex,len(nums)):
self.path.append(nums[i])
self.backtracking(nums,i+1)
self.path.pop()
return
def subsets(self, nums: List[int]) -> List[List[int]]:
self.backtracking(nums,0)
return self.res
90. 子集 II(有重复需要去重)
题目
给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。
solution
又又是lzx自己写的 小狗拍手!!!!!!!!!
class Solution:
def __init__(self):
self.res=[]
self.path=[]
def backtracking(self,nums,startindex,used):
if len(self.path)<=len(nums):
self.res.append(self.path[:])
for i in range(startindex,len(nums)):
#print(i,used)
if i>=1 and nums[i]==nums[i-1] and used[i-1]==0:continue
else:
used[i]=1
self.path.append(nums[i])
self.backtracking(nums,i+1,used)
used[i]=0
self.path.pop()
return
def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
nums.sort()
used=[0]*len(nums)
self.backtracking(nums,0,used)
return self.res