基于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; } }