【发布时间】:2017-08-20 21:29:54
【问题描述】:
我正在尝试使用树结构来创建置换函数:
import copy
def myPermutation (newString, newDict):
if sum(newDict.values()) == 0:
return ' '
else:
curDict = copy.deepcopy(newDict)
nextDict = copy.deepcopy(newDict)
results = []
for i in range(len(newString)):
curChar = newString[i]
if curDict[curChar] == 0:
continue
else:
print(curDict, ' -> ', curChar)
nextDict[curChar] -= 1
print(nextDict)
for p in myPermutation(newString, nextDict):
results.append(curChar+p)
# myPermutation(newString, nextDict)
# results.append(curChar)
nextDict=copy.deepcopy(newDict)
return results
def curDict (newString):
myDict = dict()
for char in newString:
myDict[char] = myDict.get(char,0) + 1
return myDict
newString = 'ABC'
newDict = curDict(newString)
test = myPermutation(newString, newDict)
print(test)
输出是这样的: ['ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA']
但如果我使用“AAB”作为测试数据,我的输出是: ['AAB','AAB','ABA','ABA','AAB','AAB','ABA','ABA','BAA','BAA','BAA','BAA']
使用树结构进行排列的全部目的是如果其中一个字符重复,我可以避免重载递归函数。 click here for "tree structure algorithm"
- 有人知道调整代码以使算法有效吗?
- 如何避免在置换函数中使用return ' '?根据我的输出,每个排列元素都有一个 SPACE。我尝试使用 '' 或 None,但编译器总是给我错误消息。
【问题讨论】:
标签: python-3.x recursion tree permutation