完整版 leetcode 46
public List<List<Integer>> permute(int[] nums) {
backtrack(nums, 0, nums.length - 1);
return result;
}
private void backtrack(int[] nums, int start, int end) {
if (start == end) {
List<Integer> list = new ArrayList<>();
for (int num : nums) {
list.add(num);
}
result.add(list);
} else {
for (int i = start; i <= end; i++) {
swap(nums, start, i);
backtrack(nums, start + 1, end);
swap(nums, start, i);
}
}
}
private void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
今天笔试也考了全排列,大部分逻辑都一样,可以背一下这个框架,很简单
private void backtrack(int[] nums, int start, int end) {
if (start == end) {
// 此时排列完成
} else {
for (int i = start; i <= end; i++) {
// 交换两个数字
swap(nums, start, i);
backtrack(nums, start + 1, end);
swap(nums, start, i);
}
}
}