题目描述
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
思路1:回溯算法
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
List<Integer> tmp = new ArrayList<Integer>();
boolean[] flag = new boolean[nums.length];
permuteSearch(res, tmp, flag, nums);
return res;
}
public void permuteSearch(List<List<Integer>> res, List<Integer> tmp, boolean[]flag, int[]nums) {
if(tmp.size() == nums.length) {
res.add(new ArrayList<Integer>(tmp));
return;
}
for(int i=0;i<nums.length;i++) {
if(flag[i]) {
continue;
}
flag[i] = true;
tmp.add(nums[i]);
permuteSearch(res, tmp, flag, nums);
//该节点下的路径已遍历完毕,则清除该节点,开始遍历该节点的兄弟节点
flag[i] = false;
tmp.remove(tmp.size()-1);
}
}