本文共 1177 字,大约阅读时间需要 3 分钟。
为了解决这个问题,我们需要生成一个字符串的所有排列,并确保排列中没有重复的元素。我们将使用深度优先搜索(DFS)来实现这一点,同时通过剪枝来处理重复字符,避免生成重复的排列。
class Solution: list = [] c = None def permutation(self, s): self.list = [] self.c = s.toCharArray() self.dfs(0) return list def dfs(self, x): if x == len(self.c) - 1: self.list.add(strjoin(self.c)) return set = set() for i in range(x, len(self.c)): if self.set.contains(self.c[i]): continue self.set.add(self.c[i]) self.swap(i, x) self.dfs(x + 1) self.swap(i, x) self.set.remove(self.c[i]) def swap(self, i, x): temp = self.c[i] self.c[i] = self.c[x] self.c[x] = temp
dfs
: swap
:交换两个位置上的字符,并还原交换的结果。这个方法通过DFS生成所有排列,并通过剪枝处理重复字符,确保生成的排列唯一且符合要求。复杂度方面,时间复杂度在最坏情况下为O(n!),其中n为字符串长度。
转载地址:http://qlzhz.baihongyu.com/