import java.util.*;
public class Solution {
//交换法
public ArrayList<String> Permutation(String str) {
HashSet<String> set = new HashSet<>() ;
helper(str.toCharArray() , 0 , set) ;
ArrayList<String> res = new ArrayList<>(set) ;
return res ;
}
//求arr[loc,,,,]的全排列
public void helper(char[] arr , int loc , HashSet<String> res) {
if(loc == arr.length-1) {//若loc是最后一个位置,则不用交换,证明一次排列已经完成
res.add(new String(arr)) ;
}
for(int i = loc ; i < arr.length ; i ++) {
swap(arr,i,loc) ;//让loc之后的每一个位置与loc交换
helper(arr,loc+1,res) ;//交换之后求loc+1之后的全排列
swap(arr,i,loc) ;//还原,准备下一次交换
}
}
public void swap(char[] arr , int index1 , int index2) {
char t = arr[index1] ;
arr[index1] = arr[index2] ;
arr[index2] = t ;
}
}