力扣:全排列(回溯算法)
2021-02-02 19:14
标签:情况 因此 image int rem 重复元素 个人 就是 info 问题:给定一个 没有重复 数字的序列,返回其所有可能的全排列 全排列问题实际可以看作是树形结构 上述为力扣题库47题解加上个人感想,若有不同的想法或做法欢迎评论交流。 力扣:全排列(回溯算法) 标签:情况 因此 image int rem 重复元素 个人 就是 info 原文地址:https://www.cnblogs.com/njuptzheng/p/12807430.html
而dfs算法在树形结构中的应用就是回溯算法。
接下来详细解释回溯算法的思想:
如图所示:在本题中,树形结构的根节点为空,根节点的第一个子节点通过遍历找到[1],继续遍历找到[1]的子节点[2],[2]的子节点[3]。此时我们可以设置一次遍历结束的标志是遍历的次数与数组的长度一致。
状态:每一个节点都表示了在求解问题上的不同阶段。如[1][2]可能代表[1]-->[2],也可能代表[1][2][3][2].
因此,深度优先遍历在回到上一层状态时需要“状态重置”。
实际编程时,需要遍历次数depth,已经选择的数path(选择的数从根节点到叶子节点,故path为栈类型),以及判断数是否被选择的boolean类型tOf。public class Main {
public List
> permute(int[] nums) {
int numsLength = nums.length; // numsLength为nums长度
List
> res = new ArrayList(); // 返回值
Deque
> res) {
// 遍历结束条件
if (numsLength == depth) {
res.add(new ArrayList(path));
return;
}
// for循环遍历
for (int i = 0; i
下一题讨论为在数组存在重复元素情况下的全排列。
下一篇:第九周JAVA