public static List<List<Integer>> permute(int[] nums) {
List<List<Integer>> ll = new ArrayList<>();
List<Integer> l = new ArrayList<>();
boolean [] visit = new boolean[nums.length];
dfs(nums,ll,l,visit);
return ll;
}
private static void dfs(int[] nums, List<List<Integer>> ll, List<Integer> l, boolean[] v) {
if(l.size() == nums.length){
ll.add(new ArrayList<>(l));
return;
}else {
for (int j = 0; j < nums.length; j++) {
if(v[j])continue;
l.add(nums[j]);
v[j] = true;
dfs(nums,ll,l,v);
v[j] = false;
l.remove(l.size() -1);
}
}
}