#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param str string字符串 
# @return string字符串一维数组
#
class Solution:
    def wuhu(self, output: list, added_list: list, remain_list: list):
        # 当剩余列表为空时,说明已经完成一种排列
        if len(remain_list) == 0:
            # 将当前排列拼接成字符串并添加到输出列表中
            output.append(''.join(added_list))
        for i in range(len(remain_list)):
            # 跳过重复元素,避免生成重复的排列
            if i > 0 and remain_list[i] == remain_list[i - 1]:
                continue
            # 复制当前已添加的列表,并添加当前元素
            added_list_copy = added_list[:] + [remain_list[i]]
            # 复制剩余列表,移除当前元素
            remain_list_copy = remain_list[:i] + remain_list[i + 1:]
            # 递归调用函数,继续生成排列
            self.wuhu(output, added_list_copy, remain_list_copy)

    def Permutation(self, str: str) -> List[str]:
        # 对输入字符串进行排序,方便后续去重
        sorted_str = sorted(str)
        output, added_list, remain_list = [], [], sorted_str
        # 调用递归函数生成排列
        self.wuhu(output, added_list, remain_list)
        return output