详情链接:LeetCode 46.全排列
1.问题思路
这是一道典型的回溯排列问题。
① 确定递归的终止条件, 即元素个数(也是值深度)为当前列表长度
② 确定每层遍历的集合,这里需要记录之前遍历过的元素,只能从未使用过的元素开始。
2.代码实现
class Solution {
LinkedList<List<Integer>> result = new LinkedList<>();
LinkedList<Integer> item = new LinkedList<>();
public List<List<Integer>> permute(int[] nums) {
recursion(nums);
return result;
}
public void recursion(int[] nums) {
// 递归推出条件
if (nums.length == item.size()) {
result.add(new ArrayList<>(item));
return;
}
// 水平遍历集合
for (int i = 0; i < nums.length; i++) {
// 不能重复
if (item.contains(nums[i])) {
continue;
}
item.add(nums[i]);
// 垂直递归
recursion(nums);
// 回溯
item.removeLast();
}
}
}
本文解析了LeetCode46题全排列问题,通过递归实现,关键在于确定终止条件和避免元素重复。作者详细介绍了回溯策略及代码实现过程。
666

被折叠的 条评论
为什么被折叠?



