输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
示例:
输入:s = "abc" 输出:["abc","acb","bac","bca","cab","cba"]
限制:
1 <= s 的长度 <= 8
Related Topics
- 字符串
- 回溯
著书三年倦写字,如今翻书不识志,若知倦书悔前程 ,无如渔樵未识时
输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
示例:
输入:s = "abc" 输出:["abc","acb","bac","bca","cab","cba"]
限制:
1 <= s 的长度 <= 8
回溯基本操作了
回溯基本操作了
class Solution {
private List<String> list;
private Integer length;
public String[] permutation(String s) {
list = new ArrayList<>();
length = s.length();
boolean[] visited = new boolean[s.length()];
dfs(s.toCharArray(),visited,0,new char[s.length()]);
String[] res = new String[list.size()];
int i = 0;
for (String s1 : list) {
res[i] = s1;
i++;
}
return res;
}
private void dfs(char[] charArr,boolean[] visited,int index,char[] newCharArr){
if (index==length){
list.add(new String(newCharArr));
return;
}
Set<Character> sameChar = new HashSet<>();
for (int i = 0; i < charArr.length; i++) {
if (visited[i]){
continue;
}
if (sameChar.contains(charArr[i])){
continue;
}
sameChar.add(charArr[i]);
visited[i] = true;
newCharArr[index] = charArr[i];
dfs(charArr,visited,index+1,newCharArr);
visited[i] = false;
}
}
}
发表评论