给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
您是否在真实的面试环节中遇到过这道题目呢?
public class Solution {
public List<List<Integer>> permute(int[] nums) {
ArrayList<List<Integer>> result=new ArrayList<List<Integer>>();
if(nums.length==0) return result;
helperDFS(nums, new boolean[nums.length],result,new ArrayList<Integer>());
return result;
}
private static void helperDFS(int[] num,boolean[] visited,ArrayList<List<Integer>> result, ArrayList<Integer> sub){
//new permutation was found
if(num.length==sub.size()){
result.add(new ArrayList<Integer>(sub));
return;
}
for(int i=0;i<num.length;i++){
if(visited[i]==false){
//flag num[i] has been visited
visited[i]=true;
sub.add(num[i]);
helperDFS(num,visited,result,sub);
//remove the last number after completed a permutation
sub.remove(sub.size()-1);
visited[i]=false;
}
}
}
}