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 }