参考代码来自:
https://blog.csdn.net/u013309870/article/details/68941284
// 该代码已经在leetcode上提交测试通过,快过95%的提交class Solution {public List<List<Integer>> permute(int[] nums) {List<List<Integer>> res = new ArrayList<>();Permutation(nums, 0, res);return res;}public void Permutation(int nums[],int start, List<List<Integer>> res ){if(start==nums.length-1){Arrays.toString(nums);List<Integer> onePermu = new ArrayList<>();for(int i : nums){onePermu.add(i);}res.add(onePermu);//如果已经到了数组的最后一个元素,前面的元素已经排好,输出。}for(int i=start;i<=nums.length-1;i++){//把第一个元素分别与后面的元素进行交换,递归的调用其子数组进行排序Swap(nums,i,start);Permutation(nums,start+1, res);Swap(nums,i,start);//子数组排序返回后要将第一个元素交换回来。//如果不交换回来会出错,比如说第一次1、2交换,第一个位置为2,子数组排序返回后如果不将1、2//交换回来第二次交换的时候就会将2、3交换,因此必须将1、2交换使1还是在第一个位置}}public void Swap(int nums[],int i,int j){int temp;temp=nums[i];nums[i]=nums[j];nums[j]=temp;}}
