问题描述
- 利用python来实现N个元素的全排列。
- 利用一个list来存储元素
- 这里考虑的是无重复元素的全排列
代码实现
- 实际上,可以将查找一个全排列的过程看成是一棵N(N表示list的长度)叉树的深度优先遍历。当到达最大深度时候就往后退一步(相当于回溯一步)
- 每次取一个元素之后,就可以进行递归。每个元素都可以当成树的根节点。
"""
@Author : Sword
@Date : 2020/6/3
@Time : 下午 13:55
@Version : v1.0
@File : full_rank.py
@Describe :全排列
"""
class NoDuplicateElement(object):
"""
无重复元素的全排列
"""
def get_full_resolution(self, store, temp_list, test_list):
if len(temp_list) == len(test_list):
store.append(temp_list[:])
else:
for i in test_list:
if i in temp_list:
continue
temp_list.append(i)
self.get_full_resolution(store, temp_list, test_list)
temp_list.pop()
def backtrack(self, test_list):
store = []
temp_list = []
self.get_full_resolution(store, temp_list, test_list)
return store
if __name__ == '__main__':
test_list = [1, 2, 3, 4]
c = NoDuplicateElement()
result = c.backtrack(test_list)
for i in result:
print(i)
print('总共{}种全排列'.format(len(result)))