491.递增子序列
题目链接:https://leetcode.cn/problems/increasing-subsequences/
class Solution:
def __init__(self):
self.path = []
self.paths = []
def findSubsequences(self, nums: List[int]) -> List[List[int]]:
self.backtracking(nums, 0)
return self.paths
def backtracking(self, nums, startindex):
if len(self.path) >= 2:
self.paths.append(self.path[:])
if startindex == len(nums):
return
uselist = set()
for i in range(startindex, len(nums)):
if (self.path and nums[i] < self.path[-1]) or nums[i] in uselist:
continue
uselist.add(nums[i])
self.path.append(nums[i])
self.backtracking(nums, i+1)
self.path.pop()
46.全排列
题目链接:https://leetcode.cn/problems/permutations/
class Solution:
def __init__(self):
self.path = []
self.paths = []
def permute(self, nums: List[int]) -> List[List[int]]:
uselist = [False] * len(nums)
self.backtracking(nums, uselist)
return self.paths
def backtracking(self, nums, uselist):
if len(self.path) == len(nums):
self.paths.append(self.path[:])
return
for i in range(0, len(nums)):
if uselist[i] == True:
continue
uselist[i] = True
self.path.append(nums[i])
self.backtracking(nums, uselist)
self.path.pop()
uselist[i] = False
47.全排列II
题目链接:https://leetcode.cn/problems/permutations-ii/
注意46 和47的区别
class Solution:
def permuteUnique(self, nums: List[int]) -> List[List[int]]:
if not nums:
return []
uselist = [0] * len(nums)
res = []
def backtracking(nums, uselist, path):
if len(path) == len(nums):
res.append(path[:])
return
for i in range(len(nums)):
if not uselist[i]:
if i>0 and nums[i] == nums[i-1] and not uselist[i-1]:
continue
uselist[i] = 1
path.append(nums[i])
backtracking(nums, uselist, path)
path.pop()
uselist[i] = 0
backtracking(sorted(nums), uselist, [])
return res