题目:原题链接(中等)
标签:回溯算法、哈希表
解法  | 时间复杂度  | 空间复杂度  | 执行用时  | 
Ans 1 (Python)  | O ( 2 N )  | O ( 2 N )  | 40ms (69.07%)  | 
Ans 2 (Python)  | |||
Ans 3 (Python)  | 
解法一:
# ---------- 生成所有不同的全排列(0047题) ----------
def permuteUnique(nums):
    visited = set()
    ans = []
    now = []
    n = len(nums)
    def track_back():
        if len(now) == n:
            ans.append(now[:])
        tmp_set = set()
        for i in range(n):
            if i not in visited:
                if nums[i] in tmp_set:
                    continue
                tmp_set.add(nums[i])
                visited.add(i)
                now.append(nums[i])
                track_back()
                now.pop()
                visited.remove(i)
    track_back()
    return ans
class Solution:
    def generatePalindromes(self, s: str) -> List[str]:
        count = collections.Counter(s)
        once = []
        twice = []
        for k, v in count.items():
            n, m = divmod(v, 2)
            if n:
                twice.extend([k] * n)
            if m:
                once.append(k)
        if len(once) > 1:
            return []
        ans = []
        for lst in permuteUnique(twice):
            ans.append("".join(lst + once + list(reversed(lst))))
        return ans









