给定一个数字列表,返回其所有可能的排列。
注意事项
你可以假设没有重复数字。
样例
给出一个列表[1,2,3],其全排列为:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
注意事项
你可以假设没有重复数字。
样例
给出一个列表[1,2,3],其全排列为:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
/**
* 给定一个数字列表,返回其所有可能的排列。
注意事项
你可以假设没有重复数字。
样例
给出一个列表[1,2,3],其全排列为:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
*
* @author Dell
*
*/
public class Test15 {
public static List<List<Integer>> permute(int[] nums)
{
List<Integer> list=new ArrayList<>();
List<List<Integer>> result=new ArrayList<>();
Arrays.sort(nums);
backtracking(nums,list,result);
return result;
}
public static void backtracking(int[] a, List<Integer> list, List<List<Integer>>result)
{
if(list.size()==a.length)
{
result.add(new ArrayList<>(list));
}
else
{
for(int i=0;i<a.length;i++)
{
if(list.contains(a[i])) continue;
list.add(a[i]);
backtracking(a,list,result);
list.remove(list.size()-1);
}
}
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] a=new int[n];
for(int i=0;i<a.length;i++)
{
a[i]=sc.nextInt();
}
List<List<Integer>> result=permute(a);
System.out.println(result);
}
}