Given a collection of distinct numbers, return all possible permutations.
For example,
[1,2,3]
have the following permutations:
[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
DFS回溯,每次循环访问所有未被标记的节点,搜索到相应的深度就生成集合。搜索完毕修改标记变量回溯。
public class Solution {
List<List<Integer>> list=new ArrayList<>();
ArrayList<Integer> arraylist=new ArrayList<>();
boolean[] onstack;
public List<List<Integer>> permute(int[] nums)
{
onstack=new boolean[nums.length];
dfs(nums.length, 0, nums);
return list;
}
public void dfs(int n,int k,int[] nums)
{
if(k==n)
{
list.add(new ArrayList<>(arraylist));
return ;
}
for(int i=0;i<nums.length;i++)
if(!onstack[i])
{
arraylist.add(nums[i]);
onstack[i]=true;
dfs(nums.length, k+1 , nums);
onstack[i]=false;
arraylist.remove(arraylist.size()-1);
}
}
}