1、解题思路总结:

1)其实这个题最难的是在头脑里面有这个一个大概思路,就是这个递归是怎么走的!

其实,就像上面我写的红色的文字,就是具体走的步骤:1-->16,是一个深度递归的过程,从上到下,从左到右。

2)i=1, 没有显示,其实是有的,只是交互的是自己!

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param num int整型一维数组 
     * @return int整型ArrayList<ArrayList<>>
     */
    public ArrayList<ArrayList<Integer>> permute (int[] num) {
        ArrayList<ArrayList<Integer>> res = new ArrayList<>();
        List<Integer> output = new ArrayList<>();
        Arrays.sort(num);
        int size = num.length;
        for(int n : num) {
            output.add(n);
        }
        backtrack(size, output, res, 0);
        return res;
    }

    public void backtrack(int size, List<Integer> output,ArrayList<ArrayList<Integer>> res , int first) {
        if(first == size) {
            res.add(new ArrayList<Integer>(output));
            return;
        }
        for(int i=first; i<size; i++) {
            Collections.swap(output, first, i);
            backtrack(size, output, res, first+1);
            Collections.swap(output, first, i); //这里前后没有区别!
        }
    }

}