def backtrack(res, result, start):
used = set()
for i in range(start, len(nums)):
if result and nums[i] < result[-1] or nums[i] in used:
continue
used.add(nums[i])
result.append(nums[i])
if len(result) > 1: res.append(list(result))
backtrack(res, result, i+1)
result.pop()
res = []
backtrack(res, [], 0)
return res
LeetCode.46 全排列
def backtrack(res, result, used):
if len(result) == len(nums):
res.append(list(result))
return
for i in range(len(nums)):
if used[i]: continue
used[i] ^= 1
result.append(nums[i])
backtrack(res, result, used)
used[i] ^= 1
result.pop()
res = []
used = [0] * len(nums)
backtrack(res, [], used)
return res
LeetCode.47 全排列II
def backtrack(res, result, used):
if len(result) == len(nums):
res.append(list(result))
return
lis = set()
for i in range(len(nums)):
if used[i]: continue
if nums[i] in lis: continue
lis.add(nums[i])
used[i] ^= 1
result.append(nums[i])
backtrack(res, result, used)
used[i] ^= 1
result.pop()
res = []
used = [0] * len(nums)
backtrack(res, [], used)
return res