题目
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
解法
代码
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> res = new LinkedList<>();
Map<Integer, Boolean> visited = new HashMap<>();
for (int num : nums) {
visited.put(num, false);
}
List<Integer> list = new LinkedList<>();
backTracking(nums, res, visited, list);
return res;
}
private void backTracking(int[] nums, List<List<Integer>> res, Map<Integer, Boolean> visited, List<Integer> list) {
if (nums.length == list.size()) {
res.add(new LinkedList<>(list));
return;
}
for (int num : nums) {
if (visited.get(num)) {
continue;
}
list.add(num);
visited.put(num, true);
backTracking(nums, res, visited, list);
list.remove(list.size()-1);
visited.put(num, false);
}
}
update20220714
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> res = new LinkedList<>();
backtracking(nums, res, new LinkedList<>());
return res;
}
private void backtracking(int[] nums, List<List<Integer>> res, List<Integer> list) {
if (list.size() == nums.length) {
res.add(new LinkedList<>(list));
return;
}
for (int num : nums) {
if (list.indexOf(num) == -1) {
list.add(num);
backtracking(nums, res, list);
list.remove(list.size() - 1);
}
}
}
}