93.复原IP地址
题目链接:复原IP地址
跟上一题差不多,也是a = s[index:(i+1)]
这里要注意。
class Solution:
def restoreIpAddresses(self, s: str) -> List[str]:
path = []
result = []
def backtracking(s,index):
if len(path) == 4 and (''.join(path) == s):
result.append('.'.join(path))
return
for i in range(index,len(s)):
a = s[index:(i+1)]
if (len(a) != 1 and a[0] == '0') or int(a) > 255:
break #这里是不用遍历了所以可以直接break了不用continue
else:
path.append(a)
backtracking(s,(i+1))
path.pop()
backtracking(s,0)
return result
78.子集
题目链接:子集
class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
path = []
result = []
def backtracking(nums,index):
result.append(path[:])
for i in range(index,len(nums)):
path.append(nums[i])
backtracking(nums,i+1)
path.pop()
backtracking(nums,0)
return result
能跑,但不知道backtracking里怎么return:
if start_index == len(nums):
return
补上
class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
path = []
result = []
def backtracking(nums,index):
result.append(path[:])
if index == len(nums):
return
for i in range(index,len(nums)):
path.append(nums[i])
backtracking(nums,i+1)
path.pop()
backtracking(nums,0)
return result
90.子集II
题目链接:子集II
class Solution:
def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
path = []
result = []
nums.sort()
def backtracking(nums,index):
if path not in result:
result.append(path[:])
if index == len(nums):
return
for i in range(index,len(nums)):
path.append(nums[i])
backtracking(nums,(i+1))
path.pop()
backtracking(nums,0)
return result
一直学不好的那种去重今天想到了,但是差一点。
class Solution:
def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
path = []
result = []
nums.sort()
def backtracking(nums,index):
result.append(path[:])
if index == len(nums):
return
for i in range(index,len(nums)):
#这里是>index,不是>0.
if i > index and nums[i] == nums[i-1]:
continue
path.append(nums[i])
backtracking(nums,(i+1))
path.pop()
backtracking(nums,0)
return result