import java.util.*;
/**
* NC121 字符串的排列
* @author d3y1
*/
public class Solution {
private int N;
private HashSet<String> set = new HashSet<>();
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @return string字符串ArrayList
*/
public ArrayList<String> Permutation (String str) {
return solution(str);
}
/**
* 字符串 + 递归
* @param str
* @return
*/
private ArrayList<String> solution(String str){
N = str.length();
dfs(str.toCharArray(), 0);
return new ArrayList<>(set);
}
/**
* 递归
* @param chars
* @param idx
*/
private void dfs(char[] chars, int idx){
set.add(String.valueOf(chars));
for(int j=idx; j<N; j++){
swap(chars, idx, j);
dfs(chars, idx+1);
swap(chars, idx, j);
}
}
/**
* 交换
* @param chars
* @param i
* @param j
*/
private void swap(char[] chars, int i, int j){
char tmp = chars[i];
chars[i] = chars[j];
chars[j] = tmp;
}
}