题目要求是根据输入的数组输出各种它的所有排列组合。可以看出这是一道典型的深度优先搜索的问题。可以在搜索时将已搜到的未搜到的进行拆分。初始将搜到的置为空,未搜到的未全部数组。当搜到的数组长度与原始输入的数组相同时返回。
以下为我的代码:
public static List<List<Integer>> permute(int[] nums) {
List<List<Integer>> result=new ArrayList<List<Integer>>();
List<Integer>left=new ArrayList<Integer>();
List<Integer>input=new ArrayList<Integer>();
int len=nums.length;
for (int i=0;i<len;i++)
{
left.add(nums[i]);
}
dfs(input,left,len,result);
return result;
}
public static void dfs(List<Integer> input, List<Integer>left, int len, List<List<Integer>> result)
{
if (input.size()==len)
{
result.add(input);
return;
}
for (int i=0; i<left.size();i++)
{
int num=left.get(i);
List<Integer> newinput=new ArrayList<Integer>(input);
List<Integer> newleft=new ArrayList<Integer>(left);
newinput.add(num);
newleft.remove(i);
dfs(newinput,newleft,len,result);
}
}