回溯
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> permutations = new ArrayList<>();
int n = nums.length;
backtrack(n, nums, new ArrayList<>(), permutations);
return permutations;
}
private void backtrack(int n, int[] nums, List<Integer> currentPerm, List<List<Integer>> permutations) {
// 递归结束条件:当currentPerm的长度等于nums的长度时,已经得到一个全排列
if (currentPerm.size() == n) {
permutations.add(new ArrayList<>(currentPerm));
return;
}
for (int i = 0; i < n; i++) {
if (currentPerm.contains(nums[i])) {// 存在即跳过
continue;
}
currentPerm.add(nums[i]);
backtrack(n, nums, currentPerm, permutations);
currentPerm.remove(currentPerm.size() - 1);
}
}
}