题目描述
输入一个字符串,打印出该字符串中字符的所有排列。 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
示例: 输入:s = "abc" 输出:["abc","acb","bac","bca","cab","cba"]
解题思路: 递归回溯法
- 这是一个排列的问题, 我们可以直接使用回溯来做
- 每次递归记录已经遍历过的item, 当长度与字符串相同时, 表示遍历到了一个组合, 加入result, 进行下次遍历
- 每次递归除了当前元素以外的其他所有元素list, 进行排列组合
- 递归以后将加入的值删除进行回溯
注: 因为结果不能重复, 所以我们考虑使用set来存储, 做到过滤重复值
示例代码
def permutation(self, s: str) -> [str]:
def backCall(path, list):
if len(path) == len(s):
result.add("".join(path))
return
for i in range(0, len(list)):
item = list[i]
path.append(item)
backCall(path, list[:i] + list[i + 1 :])
path.pop()
result = set()
backCall([], list(s))
return list(result)