一道全排列问题。 实际上可以利用递归回溯一位一位的取全排列可能,这样最终可以得到所有结果。 简单来说,从num[0]开始每一位和其之后的每个数都可以交换位置形成一种排列....避免和之前的已交换过的数交换以免重复,这样可以实现全排列。要注意的是这里的返回类型是List是不可以初始化的,所以要用ArrayList来做,返回的时候强制转化一下。
public class Solution {
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
public List<List<Integer>> permute(int[] num) {
int n = num.length;
if(n==0)
{
return (List)res;
}
fun(num,0);
return (List)res;
}
void fun(int[] num,int n)
{
if(n==num.length)
{
ArrayList<Integer> tmp = new ArrayList<Integer>();
for( int i=0;i<n;i++ )
{
tmp.add(num[i]);
}
res.add(tmp);
}
for( int i=n;i<num.length;i++ )
{
int tmp = num[n];
num[n] = num[i];
num[i] = tmp;
fun(num,n+1);
tmp = num[n];
num[n] = num[i];
num[i] = tmp;
}
}
}