python 按字典序全排列递归实现
代码:
def swap(num, i, j):
for x in range(j, i, -1):
tmp = num[x]
num[x] = num[x-1]
num[x-1] = tmp
def swapback(num, i, j):
for x in range(i, j):
tmp = num[x]
num[x] = num[x+1]
num[x+1] = tmp
def permutation(numbers, start):
if start == len(numbers) - 1:
print(" ".join(numbers))
else:
for i in range(start, len(numbers)):
swap(numbers, start, i)
permutation(numbers, start + 1)
swapback(numbers, start, i)
def func():
num = int(input())
numbers = []
for i in range(1, num + 1):
numbers.append(str(i))
permutation(numbers, 0)
if __name__ == "__main__":
func()
输出结果:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
递归 顺序排列
递归实现全排列的同时,需要保证能够按照字典序输出。
起始列表按序保存,在调换位置时,将要调换的值从后往前循环移到start位置而非直接交换两个点的位置,保证后半部分数值能保持大小顺序。
错误结果示例(如使用简单交换方式)
1 2 3
1 3 2
2 1 3
2 3 1
3 2 1
3 1 2