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

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

由于数组中出现重复元素,所以需要去重。在树层上去重,如何才能知道在同一层?即当usedi-1=0时,说明已经完成了回溯,回到了上一层。此时,当numsi=numsi-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()
相关推荐
happylifetree4 小时前
Python70:核心语法-函数进阶-案例2
python
王中阳Go4 小时前
两个入口答案不一致先别调模型:6 行入口口径对账表(附脚本)
人工智能·后端·python·大语言模型·1024程序员节
BK贝壳4 小时前
bool-hybrid-array 落盘我只认 .bha:用 Create_BHA / Ask_BHA 做布尔数组序列化
数据结构·python·numpy·1024程序员节
Sakura_j_h_5 小时前
Python 在定时任务里输出 emoji,UnicodeEncodeError 从哪来
开发语言·字符编码·windows·python·定时任务
supabc1236 小时前
欧盟电子发票(XRechnung/Peppol/ZUGFeRD)踩坑记:用 Python 不装 Java 跑官方校验规则
xml·python·开源·电子发票·1024程序员节
ZhengEnCi6 小时前
AI Agent工具调用防护层怎么写-一份能直接跑的Python四层拦截实现
python·llm·agent
ZhengEnCi7 小时前
AI Agent工具误调用怎么解决-从参数校验到高危二次确认的四层工程防线
python·llm·agent
镜子AI8 小时前
镜子AI工程教程:用Python实现关键词布局检查器与语义改写查重(附完整代码)
人工智能·python·microsoft
小oo呆9 小时前
【学习心得】Python协程
python
信誓旦旦的程序猿9 小时前
【Python量化实战宝典 #22】涨跌停、连板情绪手册:情绪指标构建(Python 可跑)
python·1024程序员节·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口