输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
示例:
输入:s = “abc”
输出:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”]
来源:力扣(LeetCode)
用dfs+回溯的方法。本题要注意的一个地方就是可能会有重复的元素,不能重复计数,解决的办法是每次固定一个元素向下遍历的时候维护一个HashSet,一旦发现了重复元素就剪枝。
class Solution {
List<String> res=new ArrayList<>();
char[]c;
public String[] permutation(String s) {
c=s.toCharArray();
dfs(0);
return res.toArray(new String[res.size()]);
}
public void dfs(int index){
if(index==c.length-1){
res.add(String.valueOf(c));
return;
}
for(int i=index;i<c.length;i++){
swap(i,index);
dfs(index+1);
swap(index,i);
}
}
public void swap(int a,int b){
char temp=c[a];
c[a]=c[b];
c[b]=temp;
}
}
博客介绍输入字符串打印其所有字符排列的问题,以LeetCode题目为例,给出示例。提出用dfs+回溯方法解决,同时指出因可能存在重复元素不能重复计数,解决办法是在每次固定元素向下遍历时维护HashSet,发现重复元素就剪枝。
218

被折叠的 条评论
为什么被折叠?



