问题描述(原题链接)
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
代码:
class Solution {
public List<List<Integer>> permute(int[] nums) {
//回溯去重
int len = nums.length;
List<List<Integer>> res = new ArrayList<List<Integer>>();
List<Integer> temp = new ArrayList<Integer>();
boolean[] hasVisit = new boolean[len];
for(int i=0;i<len;i++)
hasVisit[i]=false;
search(res,temp,nums,hasVisit,0);
return res;
}
public void search(List<List<Integer>> res,List<Integer> temp,int[] nums,boolean[] hasVisit,int len){
if(len==nums.length){
res.add(new ArrayList<Integer>(temp));
return;
}
for(int i=0;i<nums.length;i++){
//先选一个值,然后如果没被选定,那么就加入temp,继续剩余数的排列;
//如果选定,直接下一次循环来排列,通过for循环使得每个数都能被找到
if(!hasVisit[i]){
temp.add(nums[i]);
hasVisit[i]=true;
search(res,temp,nums,hasVisit,len+1);
temp.remove(temp.size()-1);
hasVisit[i]=false;
}
}
}
}