我试图置换一个列表,但我不能这样做,它会无限循环。我尝试了不同的东西,但不知怎的,它告诉我的唯一的事情是1 2 3 ... 1 2 3等
这是代码:
def prints(v,k):
s = ''
for i in range(k + 1):
s += str(v[i]) + ' '
print(s)
def continuare(v,k):
ok = True
for i in range(k):
if v[i] == v[k]:
ok = False
break
return ok
def back(v,a):
k = 0
caut = False
while k>-1:
caut = False
pos = 0
while pos < len(a) and caut == False:
v[k] = a[pos]
pos += 1
if continuare(v,k):
caut = True
if caut == False:
k -= 1
elif k == len(a) - 1:
prints(v,k)
else:
k += 1
a = [1,2,3]
v = []
for x in range(len(a)):
v.append(a[0])
back(v,a)
答案 0 :(得分:1)
这是来自http://www.geeksforgeeks.org/write-a-c-program-to-print-all-permutations-of-a-given-string/的简单Python转录:
def swap(a, i, j):
a[i], a[j] = a[j], a[i]
def permute(a, i, n):
if i == n:
print(a)
return
for j in range(i, n+1):
swap(a, i, j)
permute(a, i+1, n)
swap(a, i, j) # backtrack
def main():
a = list('ABC')
permute(a, 0, 2)
if __name__ == '__main__':
main()
我宁愿permute
成为一个产生排列的生成器,main
循环并打印它们,但这可能更接近C
原始,因此更容易跟随。请注意,一个区别是必须的:这里列出的是列表,而不是C原文中的字符串,因为字符串在Python中是不可变的(因此swap
需要截然不同的逻辑,返回“带有交换的字符串”字符“而不是像”回溯“逻辑所要求的那样在原地工作。)