题目描述
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
实现
1、 回溯
回溯
class Solution {
List<List<Integer>> res = new ArrayList<>();
public List<List<Integer>> permute(int[] nums) {
if (nums == null || nums.length == 0) return res;
LinkedList<Integer> list = new LinkedList<>();
track(nums, list);
return res;
}
private void track(int[] nums, LinkedList<Integer> list) {
if (list.size() == nums.length) { // 触发条件
res.add(new LinkedList<Integer>(list)); //这里一定要new一下
return;
}
for (int i = 0; i < nums.length; i++) {
if (list.contains(nums[i])) { // 排除不合法
continue;
}
list.add(nums[i]);// 做选择
track(nums, list);// 递归下一层决策树
list.removeLast();// 撤回选择
}
}
}