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);
            }
        }
    }
}