public class _46全排列 {
List<List<Integer>> res = new LinkedList<>();
public List<List<Integer>> permute(int[] nums) {
LinkedList<Integer> track = new LinkedList<>();
backtrack(nums, track);
return res;
}
/**
* @param nums 选择列表:nums中不存在于track的元素
* @param track 路径:记录选择的元素
*/
void backtrack(int[] nums, LinkedList<Integer> track) {
// 1、结束条件
if (track.size() == nums.length) {
res.add(new LinkedList<>(track));
return;
}
// 2、在选择列表中选择
for (int i = 0; i < nums.length; i++) {
// 排除已经选择的元素
if (track.contains(nums[i])) {
continue;
}
// 3、做选择
track.add(nums[i]);
// 4、进入下一层决策树
backtrack(nums, track);
// 5、取消选择
track.removeLast();
}
}
public static void main(String[] args) {
_46全排列 全排列 = new _46全排列();
int nums[] = {1,2,3};
全排列.permute(nums);
// 结果 [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]
System.out.println(全排列.res);
}
}```
06-06