2-19-lc46全排列


46. 全排列

 1 class Solution {
 2         public List> permute(int[] nums) {
 3             List> res = new ArrayList<>();
 4             int[] visited = new int[nums.length];
 5             backtrack(res,nums,new ArrayList(),visited);
 6             return res;
 7         }
 8         private void backtrack(List> res, int[] nums, ArrayList 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//回溯栈
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     }