public List<List<Integer>> permute(int[] nums) {
int len = nums.length;
//保存的结果
List<List<Integer>> res = new ArrayList<>();
if(len == 0){
return res;
}
Deque<Integer> path = new ArrayDeque<Integer>();
//标识某个元素是否被使用
boolean[] used = new boolean[nums.length];
dfs(res, path, used,nums.length,0,nums);
return res;
}
//回溯算法主要是就是一个决策树的深度遍历过程。
public void dfs(List<List<Integer>> res, Deque<Integer> path, boolean[] used,int len,int depth,int[] nums) {
if(depth == len)
{
res.add(new ArrayList<>(path));
return;
}
for(int i=0;i<len;i++){
//如果该元素已被使用
if(used[i]){
continue;
}
path.addLast(nums[i]);
used[i] = true;
//进行下一层的递归
dfs(res,path,used,len,depth+1,nums);
//回溯
path.removeLast();
used[i] = false;
}
}
全排列回溯
最新推荐文章于 2024-04-06 14:17:35 发布