代码随想录刷题第二十八天
复原IP地址 (LC 93)
题目思路:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/370003a023774acabfe2088493d0244d.jpeg)
代码实现:
class Solution:
def __init__(self):
self.result = []
self.path = []
def restoreIpAddresses(self, s: str) -> List[str]:
self.backtracking(s, 0)
return self.result
def backtracking(self, s, startindex):
if len(self.path) == 4 and startindex>=len(s):
string = '.'.join(self.path[:])
self.result.append(string)
return
if len(self.path) == 4:
return
if startindex>=len(s):
return
for i in range(startindex, len(s)):
string1 = s[startindex : i+1]
if int(string1)>=0 and int(string1)<=255 and str(int(string1)) == string1:
self.path.append(string1)
else:
continue
self.backtracking(s, i+1)
self.path.pop()
子集问题 (LC 78)
题目思路:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/21035a062a3d43feaab7841dea83d7b0.jpeg)
代码实现:
class Solution:
def __init__(self):
self.path = []
self.result = []
def subsets(self, nums: List[int]) -> List[List[int]]:
self.backtracking(nums, 0)
return self.result
def backtracking(self, s, startindex):
self.result.append(self.path[:])
for i in range(startindex, len(s)):
self.path.append(s[i])
self.backtracking(s, i+1)
self.path.pop()
子集问题 II (LC 90)
题目思路:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/56e73589d8944a8e859a028ddf3607d6.jpeg)
代码实现:
class Solution:
def __init__(self):
self.path = []
self.result = []
def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
nums.sort()
used = [0 for _ in range(len(nums))]
self.backtracking(nums, 0, used)
return self.result
def backtracking(self, nums, startindex, used):
self.result.append(self.path[:])
for i in range(startindex, len(nums)):
if i>0 and nums[i] == nums[i-1] and used[i-1] == 0:
continue
used[i] = 1
self.path.append(nums[i])
self.backtracking(nums, i+1, used)
self.path.pop()
used[i] = 0