dfs+回溯
import java.util.*;
public class Solution {
public ArrayList<ArrayList<Integer>> permute(int[] num) {
ArrayList<ArrayList<Integer>> re = new ArrayList<>();
int depth = 0;
ArrayList<Integer> path = new ArrayList<>();
int n = num.length;
boolean[] vis = new boolean[n];
dfs(num, path, re, depth, n, vis);
return re;
}
public void dfs(int[] num, List<Integer> path, ArrayList<ArrayList<Integer>> re, int depth, int n, boolean[] vis){
if(depth == n){
re.add(new ArrayList<>(path));
}
for(int i = 0; i < n; i++){
if(!vis[i]){
vis[i] = true;
path.add(num[i]);
dfs(num, path, re, depth + 1, n, vis);
vis[i] = false;
path.remove(path.size() - 1);
}
}
}
}