回溯算法
实际上就是一个决策树的遍历过程:
- 路径:就是已经做出的选择
- 选择列表:就是你当前可以做的选择
- 结束条件:就是到达决策树底层,无法再做选择的条件
回溯算法的框架(伪代码)
result = []
def backtrack(路径,选择列表):
if 满足结束条件:
result.add(路径)
return
for 选择 in 选择列表:
做选择
backtrack(路径,选择列表)
撤销选择
解题思路
输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
示例:
输入:s = “abc”
输出:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”]
解题思路
回溯法题目无非就是穷举所有可能,我们对字符串中的字符进行两两交换,可以得到所有结果,难点在于,有些字符会重复出现,所以这样得到的字符串也会重复。
要去重复,可以用set容器来存储得到的结果,最后返回结果集的数组形式即可。