Given a collection of distinct numbers, return all possible permutations.
For example,[1,2,3]
have the following permutations:
[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
本题采用回溯法,回溯法的特点是可以系统地搜索一个问题的所有解或者一个解,本问题是搜索所有解。回溯法利用的是dfs方法解决,回溯法有个剪枝函数的说法,剪枝函数是除掉不符合条件的解。剪枝函数包括两个函数,一个是约束函数一个是限界函数,约束函数是指,在进行dfs的过程中除去不符合条件的当前解以及以当前解为根结点的子树,而限界函数指的是除去不符合最优解的解空间。本题中,不包含最优解的情况,约束函数是
看链表中是否包含该数组元素,代码如下:
1 public class Solution { 2 public List<List<Integer>> permute(int[] nums) { 3 List<List<Integer>> res = new ArrayList<>(); 4 backtracking(res,new ArrayList<Integer>(),nums); 5 return res; 6 } 7 public void backtracking(List<List<Integer>> res,List<Integer> list,int[] nums){ 8 if(list.size()==nums.length){ 9 res.add(new ArrayList<Integer>(list)); 10 }else{ 11 for(int i=0;i<nums.length;i++){ 12 if(list.contains(nums[i])) continue; 13 list.add(nums[i]); 14 backtracking(res,list,nums); 15 list.remove(list.size()-1); 16 } 17 } 18 } 19 }