📅  最后修改于: 2023-12-03 14:55:33.773000             🧑  作者: Mango
给定一个字符串,编写一个函数来计算字符串中所有字符的排列组合。
输入: "abc"
输出: ["abc","acb","bac","bca","cab","cba"]
将字符串看做一个有序数组,根据全排列的定义,先列出第一个数的所有可能,即把第一个数依次与后面的所有数交换;然后固定第一个数,求后面的数的全排列,这个时候还可以和后面的数交换,以此类推。
class Solution:
def permutation(self, s: str) -> List[str]:
if not s: return []
res = []
chars = list(s) # 转为字符数组
n = len(chars)
def dfs(pos: int):
if pos == n - 1:
res.append(''.join(chars))
return
used = set()
for i in range(pos, n):
if chars[i] in used: continue
used.add(chars[i])
chars[pos], chars[i] = chars[i], chars[pos]
dfs(pos + 1)
chars[pos], chars[i] = chars[i], chars[pos]
dfs(0)
return res
时间复杂度:O(N!),其中 N 为字符串的长度。
空间复杂度:O(N),其中 N 为字符串的长度。我们需要 O(N) 的标记数组、O(N) 的递归栈空间,以及 O(N!) 的结果空间。