【发布时间】:2022-08-17 21:29:20
【问题描述】:
作为尝试更好地回溯的一部分,我编写了以下代码来置换字符串:
def permute(str):
permuteHelper(str,\"\")
def permuteHelper(str,chosen):
if not str:
print(chosen)
else:
for i in range(len(str)):
#choose
currChar = str[i] #The char we choose
chosen += currChar #Add chosen char to chosen chars
str = str[0 : i] + str[i + 1 :] #Remove char in i
#explore
permuteHelper(str,chosen) #Explore
#unchoose
str = str[:i] + currChar + str[i:] #Put currChar where it was
chosen = chosen[:-1:] #Remove last char of chosen
permute(\"abc\")
//
abc
acb
bac
bca
cab
cba
这给了我想要的结果。
但是当我尝试在整数数组上实现相同的逻辑时:
def permute(nums):
lst = []
permuteHelper(nums, [], lst)
def permuteHelper(nums,chosen, lst):
if len(nums) == 0:
print(chosen)
else:
for i in range(len(nums)):
#choose
currNum = nums[i]
chosen.append(currNum)
nums.pop(i)
#explore
permuteHelper(nums,chosen,lst)
#unchoose
nums.insert(i,currNum)
chosen = chosen[:-1]
permute([1,2,3])
//
[1, 2, 3]
[1, 2, 3, 2]
[1, 2, 2, 1, 3]
[1, 2, 2, 1, 3, 1]
[1, 2, 2, 1, 3, 1, 2]
[1, 2, 2, 1, 3, 1, 2, 1]
我正在寻找的结果是:
[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]
为什么 permute for numbers 的作用不一样?
标签: python subset permutation backtracking