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 }