
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;
public class Solution {
public static void main(String[] args) {
int[] a={1,2,3};
List<List<Integer>> permute = permute(a);
for (List<Integer> integers : permute) {
System.out.println(integers);
}
}
static List<List<Integer>> permute(int[] nums){
int len= nums.length;
List<List<Integer>> res=new ArrayList<>();
boolean[] used=new boolean[len];
Deque<Integer> path=new ArrayDeque<>();
dfs(nums,len,0,path,used,res);
return res;
}
static void dfs(int[] nums, int len, int depth, Deque path,boolean[] used, List<List<Integer>> res) {
if (depth==len){
res.add(new ArrayList<>(path));
return;
}
for (int i = 0; i < len; i++) {
if (used[i]==true)
continue;
path.addLast(nums[i]);
used[i]=true;
dfs(nums,len,depth+1,path,used,res);
path.removeLast();
used[i]=false;
}
}
}