package Test;
import java.util.LinkedList;
import java.util.List;
public class Test11 {
public static void main(String[] args) {
System.out.println(permute(new int[]{1, 2, 3,4}));
}
static List<List<Integer>> res = new LinkedList<>();
/* 主函数,输入一组不重复的数字,返回它们的全排列 */
static List<List<Integer>> permute(int[] nums) {
// 记录「路径」
LinkedList<Integer> track = new LinkedList<>();
backtrack(nums, track);
return res;
}
static void backtrack(int[] nums, LinkedList<Integer> track) {
// 触发结束条件
if (track.size() == nums.length) {
res.add(new LinkedList(track));
return;
}
for (int i = 0; i < nums.length; i++) {
// 排除不合法的选择
if (track.contains(nums[i]))
continue;
// 做选择
track.add(nums[i]);
System.out.println(">>>:"+track);
// 进入下一层决策树
backtrack(nums, track);
// 取消选择
track.removeLast();
System.out.println("<<<"+track);
}
}
}
Java递归(回溯法)求全排列
最新推荐文章于 2024-07-28 19:46:20 发布