题目:
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] ]
题意及分析:给出一组没有重复元素的数字,记做nums,要求求出所有可能的序列。做了好几道回溯的题目,终于有点懂了。对于回溯的题目,(1)首先要找到回溯结束的条件,我们用一个arraylist保存可能出现的序列,那么在这里的结束条件就是arraylist的长度等于 nums.length,(2)然后查找回溯进入下一层的条件,对于这道题每一次回溯来说,边界条件为 当前数组中还有数字没有加入进arraylist中,那么就进行下一层的运算。看下面的代码就明白了。
代码:
public class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> list=new ArrayList<>();
List<Integer> array=new ArrayList<>();
int n=nums.length;
backtracking(list, array, 0, n, nums);
return list;
}
public void backtracking(List<List<Integer>> list,List<Integer> array,int t,int n,int[] nums) {
if(t>n) return;
else if(t==n){
list.add(new ArrayList<>(array));
}else{
for(int i=0;i<n;i++){
if((!array.contains(nums[i]))){
array.add(nums[i]);
backtracking(list, array, t+1, n, nums);
array.remove(array.size()-1);
}
}
}
}
}