一个函数实现列表中有重复和无重复元素的全排列问题

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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值