目录
一、题目描述
二、整体思路
三、代码
一、题目描述
原题地址
二、整体思路
对于全排列问题,很明显要用回溯法。但是和组合问题不一样的是全排列问题是可以取先前遍历的元素的。因此需要另外新建一个状态数组来存储所有元素是否被访问过的状态。回溯时把状态数组的当前元素的状态恢复成未访问。
三、代码
class Solution {
List<List<Integer>> res=new ArrayList<>();
List<Integer> temp=new ArrayList<>();
public List<List<Integer>> permute(int[] nums) {
boolean[] visited=new boolean[nums.length];
backtrace(visited,nums);
return res;
}
void backtrace(boolean[] visited,int[] nums){
if(temp.size()==nums.length){
res.add(new ArrayList<>(temp));
}
for(int i=0;i<nums.length;i++){//数组中所有元素都有可能取到,因此要遍历数组所有元素
if(visited[i]){//如果当前元素已经被访问过则直接访问下一个元素
continue;
}
temp.add(nums[i]);
visited[i]=true;
backtrace(visited,nums);
temp.remove(temp.size()-1);
visited[i]=false;
}
}
}