给定一个列表,列出所有排列
import copy
array = [3,2,5]
new_array = []
def get_results(arr):
l = len(arr)
if l == 0:
print('new array is {}'.format(new_array))
for i in range(0,l):
# 复制一份
cpy = copy.copy(arr)
# 取出元素
element = cpy.pop(i)
# 剩下
new_array.append(element)
get_results(cpy)
new_array.pop()
get_results(array)
回溯法步骤:
由于要尝试所有可能性,所有一定需要恢复现场,你改过什么就一定要改回来
- 创建现场
- 递归
- 恢复
全排列可以换一种思维进行思考:
- 领导通知班主任要求各班高矮排列
- 班主任要求班长高矮排列
- 班长…
这个例子可能不太恰当,其实就是先从队列中选择一个数,然后让剩下的数全排列,然后再从剩下的数中再选择一个,依次往下,知道最后只剩一个数开始返回
结果如下:
new array is [3, 2, 5]
new array is [3, 5, 2]
new array is [2, 3, 5]
new array is [2, 5, 3]
new array is [5, 3, 2]
new array is [5, 2, 3]