全排列
def dfs(nums, d):
if d == len(nums):
print(nums)
for i in range(d, len(nums)):
nums[d], nums[i] = nums[i], nums[d]
dfs(nums, d+1)
nums[d], nums[i] = nums[i], nums[d]
dfs([1,2,3], 0)
输出:
[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 2, 1]
[3, 1, 2]
nums中选择d个,顺序无关
def dfs(nums, d, s, curr, ans):
if d == 0:
ans.append(copy.copy(curr))
return
for i in range(s, len(nums)):
curr.append(nums[i])
dfs(nums, d-1, i+1, curr, ans)
curr.pop()
ans = []
dfs([1, 2, 3], 2, 0, [], ans)
print(ans)
nums中选择d个,顺序相关
def dfs(nums, d, used, curr, ans):
if d == 0:
ans.append(copy.copy(curr))
return
for i in range(len(nums)):
if used[i]:
continue
used[i] = True
curr.append(nums[i])
dfs(nums, d-1, used, curr, ans)
curr.pop()
used[i] = False
ans2 = []
dfs([1, 2, 3], 2, [False]*3, [], ans2)
print(ans2)