获取全排列

不重复数据

def permute(nums):
    res = []
    
    def backtrack(path, used):
        if len(path) == len(nums):
            res.append(path[:])  # 拷贝一份
            return
        for i in range(len(nums)):
            if used[i]:
                continue
            used[i] = True
            path.append(nums[i])
            backtrack(path, used)
            path.pop()       # 撤销选择
            used[i] = False  # 恢复状态
    
    backtrack([], [False] * len(nums))
    return res

print(permute([1, 2, 3]))
# [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

 

 

有重复数据

def permute_unique(nums):
    nums.sort()  # 先排序,让相同元素相邻
    res = []
    
    def backtrack(path, used):
        if len(path) == len(nums):
            res.append(path[:])
            return
        for i in range(len(nums)):
            if used[i]:
                continue
            # 去重:当前元素和前一个相同,且前一个未被使用(说明是同一层)
            if i > 0 and nums[i] == nums[i-1] and not used[i-1]:
                continue
            used[i] = True
            path.append(nums[i])
            backtrack(path, used)
            path.pop()
            used[i] = False
    
    backtrack([], [False] * len(nums))
    return res

print(permute_unique([1, 1, 2]))
# [[1,1,2],[1,2,1],[2,1,1]]

 

 
posted @ 2026-11-01 22:29  r1-12king  阅读(3)  评论(0)    收藏  举报