全排列2(重复元素去重、python)

思路:看到需要去重的,如果不要求顺序或者是序列,首先要排序。

由于数组中出现重复元素,所以需要去重。在树层上去重,如何才能知道在同一层?即当used[i-1]=0时,说明已经完成了回溯,回到了上一层。此时,当nums[i]=nums[i-1]时,说明该层出现重复元素,跳过该元素的搜索。

复制代码
# #全排列2  重复元素去重
def permute2(nums):  #nums=[1,1,2]
    n=len(nums)
    nums.sort()
    res=[]
    path=[]
    used=[0]*n
    def dfs(level):
        if level==n:
            res.append(path[:])
            return
        for i in range(n):
            if i>0 and nums[i-1]==nums[i] and used[i-1]==0:  #去重逻辑
                continue
            if used[i]==0:
                used[i]=1
                path.append(nums[i])
                dfs(level+1)
                used[i]=0
                path.pop()
    dfs(0)
    print(res)
    return res
def main():
    nums=list(map(int,input().split()))
    permute2(nums)
if __name__=="__main__":
    main()
相关推荐
zhangchaoxies2 小时前
HTML怎么显示同步最后成功时间_HTML “上次同步:X分钟前”【教程】
jvm·数据库·python
m0_514520572 小时前
mysql服务器如何优化网络传输设置_调整tcp相关内核参数
jvm·数据库·python
m0_640309302 小时前
如何快速重置SQL表中的自增ID_使用ALTER TABLE重置计数
jvm·数据库·python
2301_764150562 小时前
CSS如何制作响应式导航栏_利用Flexbox实现自适应水平排列
jvm·数据库·python
qq_334563552 小时前
HTML怎么创建表格_HTML表格结构与基本语法【教程】
jvm·数据库·python
yejqvow122 小时前
C#怎么实现缓存功能 C#如何用MemoryCache和Redis实现数据缓存提升访问速度【架构】
jvm·数据库·python
AC赳赳老秦2 小时前
测试工程师:OpenClaw自动化测试脚本生成,批量执行测试用例
大数据·linux·人工智能·python·django·测试用例·openclaw
2401_835956812 小时前
如何通过phpMyAdmin修改Laravel用户的密码_使用Bcrypt哈希格式更新User表字段
jvm·数据库·python
qq_342295822 小时前
如何用 error 事件全局捕获页面图片或脚本加载失败状态
jvm·数据库·python