思路:看到需要去重的,如果不要求顺序或者是序列,首先要排序。
由于数组中出现重复元素,所以需要去重。在树层上去重,如何才能知道在同一层?即当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()