基于swap

import java.util.*;

public class Solution {

    public ArrayList<ArrayList<Integer>> permute(int[] num) {
        ArrayList<ArrayList<Integer>> res = new ArrayList<>();
        if(num==null||num.length==0) return res;
        Arrays.sort(num);
        int start=0;
        helper(num,res,start);
        return res;
    }

    public void helper(int[] num, ArrayList<ArrayList<Integer>> res, int start){
        if(start==num.length-1){
            ArrayList<Integer> cur = new ArrayList<>();
            for(int j=0;j<num.length;j++){
                cur.add(num[j]);
            }
            res.add(cur);
        }
        for(int i=start;i<num.length;i++){
            swap(num,i,start);
            helper(num,res,start+1);
            swap(num,i,start);
        }
    }

    public void swap(int[] num, int s, int e){
        int tmp=num[s];
        num[s]=num[e];
        num[e]=tmp;
    }
}