Leetcode之回溯法专题-46. 全排列(Permutations)
Leetcode之回溯法专题-46. 全排列(Permutations)
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
分析:利用回溯法,回溯vis数组,表示是否选择了该数字,例如vis[1]=1代表选择了下标为1的数字。
AC代码:
class Solution { List<List<Integer>> ans = new ArrayList<>(); int vis[] = null; public List<List<Integer>> permute(int[] nums) { vis = new int[nums.length]; Arrays.fill(vis,0); dfs(nums,0,new ArrayList<Integer>()); return ans; } public void dfs(int nums[],int position,ArrayList<Integer> tmp){ if(position>nums.length-1){ if(tmp.size()==nums.length){ ans.add(new ArrayList<>(tmp)); } return; } for(int i=0;i<nums.length;i++){ if(vis[i]==1) continue; vis[i] = 1; tmp.add(nums[i]); dfs(nums,position+1,tmp); tmp.remove(tmp.size()-1); vis[i] = 0; } } }
作者:秦羽纶
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.