全排列
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
示例:
- 输入: [1,2,3]
- 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
package com.company;
import java.util.*;
class Solution {
private List<Integer> path = new ArrayList<>(); // 创建一个空的列表来存储当前子序列
private List<List<Integer>> res = new ArrayList<>(); // 创建一个空的列表来存储所有递增子序列
public List<List<Integer>> findSubsequences(int num[]) { // 寻找递增子序列的主函数,参数为整型数组
int used[] = new int[10000]; // 创建一个数组来标记元素是否被使用过
backtracking(num, used); // 调用回溯函数
return res; // 返回所有递增子序列的列表
}
private void backtracking(int[] num, int used[]) { // 回溯函数,参数为整型数组和标记数组
if (path.size() >= num.length) { // 如果当前子序列长度已经等于数组长度,则将该子序列加入结果列表中,并返回
res.add(new ArrayList<>(path));
return;
}
for (int i = 0; i < num.length; i++) { // 遍历整个数组
if (used[i] == 1) continue; // 如果该元素已经被使用过,则跳过该元素
used[i] = 1; // 标记该元素已被使用过
path.add(num[i]); // 将该元素加入当前子序列中
backtracking(num, used); // 递归调用回溯函数,继续向下寻找
path.remove(path.size() - 1); // 回溯,将该元素从当前子序列中移除
used[i] = 0; // 将该元素标记为未使用过
}
}
public static void main(String[] args) { // 主函数
Solution solution = new Solution(); // 创建Solution对象
int[] nums = {1,2,3}; // 初始化整型数组
List<List<Integer>> result = solution.findSubsequences(nums); // 调用寻找递增子序列的函数,并将结果赋值给result
System.out.println(result); // 输出结果
}
}