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] ]
public class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> list = new ArrayList<>();
backtrack(list, new ArrayList<>(), nums);
return list;
}
private void backtrack(List<List<Integer>> list, List<Integer> tempList, int[] nums){
if(tempList.size() == nums.length){
list.add(new ArrayList<>(tempList));
}
else{
for(int i=0; i<nums.length;i++){
if(tempList.contains(nums[i])) continue;
tempList.add(nums[i]);
backtrack(list,tempList,nums);
tempList.remove(tempList.size()-1);
}
}
}
}
总结:递归
public List<List<Integer>> permute(int[] nums) {
LinkedList<List<Integer>> res = new LinkedList<List<Integer>>();
res.add(new ArrayList<Integer>());
for(int n:nums){
int size = res.size();
for(;size>0;size--){
List<Integer> r = res.pollFirst();
for(int i=0;i<=r.size();i++){
List<Integer> t = new ArrayList<Integer>(r);
t.add(i,n);
res.add(t);
}
}
}
return res;
}
总结:迭代