def permutations(arr, begin, end):
if begin == end: # 当begin等于end,就说明数组中的元素都全部固定了,这是递归的终止条件
a = "".join(list(map(str, arr)))
if a not in res: # 判断是否有重复元素
res.append(a)
# if arr not in res: # 判断是否有重复元素
# res.append(arr.copy())
else:
for index in range(begin, end):
arr[index], arr[begin] = arr[begin], arr[index]
# 数组的第一个元素和其他任意一个元素元素都交换一次,包括刚开始他自己
permutations(arr, begin + 1, end)
# 交换完成之后,对剩下的元素进行交换,即全排
arr[index], arr[begin] = arr[begin], arr[index]
# 当以arr[index]在第一位时,都排列完的时候,还要将将交换双方换回来,在进行下一次循环
# words = [1,2,3]
words = [1,2,2,3]
# words = [1,2,2,2,3,3]
begin = 0
end = len(words)
res = []
permutations(words, begin, end)
print(res)
一个函数实现列表中有重复和无重复元素的全排列问题
于 2023-08-18 14:16:43 首次发布