491. 递增子序列
题目链接: 491. 递增子序列
- 元素不能重复使用,使用used来监督
- 保持递增
class Solution:
def findSubsequences(self, nums: List[int]) -> List[List[int]]:
res=[]
path=[]
def backtracking(nums,start_index):
if len(path[:])>1:
res.append(path[:])
used=[]
for i in range(start_index,len(nums)):
if (len(path[:])!=0 and nums[i]<path[-1]) or nums[i] in used:
continue
used.append(nums[i])
path.append(nums[i])
backtracking(nums,i+1)
path.pop()
backtracking(nums,0)
return res
46. 全排列
题目链接:46. 全排列
- 使用used来监督不能重复使用,就是在递归的使用,前一个为True,说明使用过了就不能加入path。
47. 全排列 II
题目链接:47. 全排列 II
需要加一个去重的条件,可以参考组合II。
class Solution:
def permuteUnique(self, nums: List[int]) -> List[List[int]]:
path = []
res = []
used = [False] * len(nums)
def backtracking(nums, used):
nums.sort()
if len(path) == len(nums):
res.append(path[:])
return
for i in range(0, len(nums)):
if i >0 and nums[i]==nums[i-1] and used[i-1]==False:
continue
if used[i]==True:
continue
used[i] = True
path.append(nums[i])
backtracking(nums, used)
path.pop()
used[i] = False
backtracking(nums, used)
return res