2-19-lc46全排列

46. 全排列

 1 class Solution {
 2         public List<List<Integer>> permute(int[] nums) {
 3             List<List<Integer>> res = new ArrayList<>();
 4             int[] visited = new int[nums.length];
 5             backtrack(res,nums,new ArrayList<Integer>(),visited);
 6             return res;
 7         }
 8         private void backtrack(List<List<Integer>> res, int[] nums, ArrayList<Integer> tmp, int[] visited) {
 9             if(tmp.size()==nums.length){//走到最深一层,将结果加入result
10                 res.add(new ArrayList<>(tmp));// 注意,因为tmp为引用, 所以要拷贝新对象
11                 return;
12             }
13             for(int i=0;i<nums.length;i++){//回溯栈
14                 if(visited[i]==1)continue;//找到未访问节点
15                 tmp.add(nums[i]);visited[i] = 1;//构造数组加入节点,并设置为已访问
16                 backtrack(res,nums,tmp,visited);
17                 tmp.remove(tmp.size()-1);visited[i]=0;//回溯,移除节点并设置为未访问
18             }
19         }
20     }

 

posted @ 2022-02-19 17:28  Wind·Chaser  阅读(24)  评论(0编辑  收藏  举报