给定一个数字列表,返回其所有可能的排列。您在真实的面试中是否遇到过这个题?
Yes
样例
给出一个列表[1,2,3],其全排列为:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
挑战
能否不使用递归来实现?
标签 Expand
相关题目 Expand
解题思路:
ABC 可以看作是先将A分别与BC交换,然后递归,回溯即可
ABC------->ACB
ABC BAC ------>BCA
CBA-------->CAB
class Solution {
/**
* @param nums: A list of integers.
* @return: A list of permutations.
*/
public ArrayList<ArrayList<Integer>> permute(ArrayList<Integer> nums) {
// write your code here
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
if(null==nums||0==nums.size()) return res;
dictory(res, nums, 0);
return res;
}
public void dictory(ArrayList<ArrayList<Integer>> res,ArrayList<Integer> nums,int start){
if(start==nums.size()){
res.add((ArrayList<Integer>) nums.clone());
}else{
for(int i=start;i<nums.size();i++){
swap(nums, start, i);
dictory(res, nums, start+1);
swap(nums, start, i);
}
}
}
public void swap(ArrayList<Integer> nums ,int s,int e){
int tmp1 = nums.get(s);
int tmp2 = nums.get(e);
nums.set(s, tmp2);
nums.set(e, tmp1);
}
}