无重复元素的全排序
public class Solution {
static List<List<Integer>> ans = new ArrayList<List<Integer>>();
static ArrayList<Integer> stack = new ArrayList<Integer>();
static int[] num;
public List<List<Integer>> permute(int[] num) {
ans.clear();
stack.clear();
this.num = num;
solve(0);
return ans;
}
public void solve(int cur){
if(cur == num.length){
ArrayList<Integer> t = new ArrayList<>();
for(Integer i : stack){
t.add(i);
}
ans.add(t);
}
else {
for(int i = cur; i < num.length;++i){
swap(num, cur, i);
stack.add(num[cur]);
solve(cur + 1);
stack.remove(stack.size() - 1);
swap(num, cur, i);
}
}
}
public void swap(int a[], int i, int j){
int t = a[i];
a[i] = a[j];
a[j] = t;
}
// public static void main(String[] args) {
// Solution s = new Solution();
// int a[] = {1,2,3};
// List<List<Integer>> t = s.permute(a);
// for(List<Integer> li : t){
// for(int i : li){
// System.out.print(" " + i);
// }System.out.println("");
// }
// }
}