#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param num int整型一维数组 
# @return int整型二维数组
#
class Solution:
    def permuteUnique(self, num: List[int]) -> List[List[int]]:
        n = len(num)
        ans = set()
        path = []
        
        def backtrack(nums, i):
            if i == n:
                ans.add(tuple(path.copy()))  # 用元组存储,保证可哈希
                return
            for x in nums:
                path.append(x)
                new_nums = nums.copy()
                new_nums.remove(x)  # 移除已选元素
                backtrack(new_nums, i + 1)
                path.pop()
                
        backtrack(num, 0)
        # 先转换为列表,再排序(按字典序),最后每个元组转回列表
        sorted_ans = sorted(ans)
        return [list(item) for item in sorted_ans]