题目描述
输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
输入输出
1 | 输入:s = "abc" |
基本思路
- 终止条件:当
x = len(c) - 1
时 代表所有位已经固定 则将组合c
转化为字符串并加入res
并返回 - 地推参数:当前固定位
x
- 递推工作:初始化一个
Set
用于排除重复的字符;将第x
位字符与i ∈ [x, len(c)]字符分别进行交换并递归- 剪枝:若
c[i]
在Set
中 代表其是重复字符因此剪枝 - 将
c[i]
加入Set
以便之后遇到重复字符时剪枝 - 固定字符:将字符
c[i]
和c[x]
交换并固定c[i]
为当前位字符 - 开启下层递归 调用
dfs(x + 1)
即开始固定第x+1个字符 - 还原交换:将字符
c[i]
和c[x]
交换(还原之前的交换)
- 剪枝:若
1 | 第一次: |
java实现
1 | class Solution { |