93.复原IP地址
题目

思路与解法
python
class Solution:
def restoreIpAddresses(self, s: str) -> List[str]:
self.res = []
self.backtracking(s, [], 0)
return self.res
def backtracking(self, s: str, path, startIdx: int):
if startIdx >= len(s) and len(path) == 4:
self.res.append('.'.join(path))
return
if len(path) > 4:
return
i = startIdx + 1
while i <= len(s):
if self.is_addr(s, startIdx, i):
path.append(s[startIdx:i])
self.backtracking(s, path, i)
path.pop()
i += 1
def is_addr(self, s, startIdx, endIdx):
s_int = int(s[startIdx:endIdx])
if s[startIdx] == '0' and endIdx - startIdx > 1:
return False
print(s_int)
if s_int >= 0 and s_int <= 255:
return True
else:
return False
78.子集
题目

思路与解法
python
class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
self.res = []
self.path = []
self.backtracking(nums, 0)
return self.res
def backtracking(self,nums:List[int], startIdx):
self.res.append(self.path[:])
if startIdx >= len(nums):
return
i = startIdx
while i < len(nums):
self.path.append(nums[i])
self.backtracking(nums, i+1)
self.path.pop()
i += 1
90.子集II
题目

思路与解法
python
class Solution:
def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
self.res = []
self.path = []
nums.sort()
self.backtracking(nums, 0)
return self.res
def backtracking(self, nums, startIdx):
self.res.append(self.path[:])
if startIdx >= len(nums):
return
i = startIdx
while i < len(nums):
self.path.append(nums[i])
self.backtracking(nums, i+1)
self.path.pop()
i += 1
while i < len(nums) and nums[i] == nums[i-1]:
i += 1