这道题可以通过递归的方式解决,无论初始nums排序如何,由于是没有重复数字的序列,所以可以每次调换两个数字的位置,最后每个循环结束后利用回溯回到初始序列状态
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> lists=new ArrayList<List<Integer>>();
List<Integer>list=new ArrayList<Integer>();
for(int i=0;i< nums.length;i++)
{
list.add(nums[i]);
}
fun(nums,0,lists);
return lists;
}
public void fun(int nums[],int n,List<List<Integer>> lists)
{
if(n>=nums.length)
{
List<Integer> list=new ArrayList<Integer>();
for(int i=0;i<nums.length;i++)
{
list.add(nums[i]);
}
lists.add(list);
}
for(int i=n;i<nums.length;i++)
{
swap(nums,n,i);
fun(nums,n+1,lists);
swap(nums,n,i);
}
}
public void swap (int nums[], int i, int j)
{
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
}