93.复原IP地址
题目

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

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

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