def permutations(arr, currentPosition, end):
if currentPosition == end:
print(arr)
else:
for index in range(currentPosition, end):
# 交换元素
arr[index], arr[currentPosition] = arr[currentPosition], arr[index]
permutations(arr, currentPosition + 1, end)
# 还原
arr[index], arr[currentPosition] = arr[currentPosition], arr[index] # 还原到交换前的状态,为了进行下一次交换
arr = [1, 2, 3]
permutations(arr, 0, len(arr))
对[1,2,3]进行全排列时,总共有123,132,213,231,321,312这六种可能。
当指针指向第一个元素1时,它可以是其本身1(即和自己进行交换),还可以和2,3进行交换,故有3中可能;当第一个元素1确定后,指针指向第二个元素位置,第二个位置可以和其本身2及其后的元素3进行交换,又可以形成两种排列,当指针指向第三个元素时,只有唯一确定元素,没有其它元素可交换,此时,确定了一组排列。
currentPosition 可以理解为当前进行到的层,最终直到底部(end)
注意,每次输出后要把数组恢复成原来的样子(溯原)