前端开发入门到精通的在线学习网站

网站首页 > 资源文章 正文

leecode 全排列回溯算法

qiguaw 2024-11-24 20:40:23 资源文章 9 ℃ 0 评论

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。


示例 1:

输入:nums = [1,2,3]

输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

示例 2:

输入:nums = [0,1]

输出:[[0,1],[1,0]]

示例 3:

输入:nums = [1]

输出:[[1]]


1、我们先选择 1,然后为 1 的第二位选择 2,此时 1 的 第三位只能选择 3。

2、然后完成了上面的步骤,我们需要回退到 1,因为只有 1 这里还存在别的选择 1-3,然后填写 1-3 后,只有 1-3-2 一种选择。

3、此时我们需要从 1-3-2,回退到 1-3,再回退到 1,再回退到 根节点,然后重新选择 2。


贴上java代码,大家还是debug看看,就一目了然了,自己纯手敲,和leecode上的题解不一样,绝对原创,给个赞吧


import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

public class test {

public static void main(String[] args) {

List<List<Integer>> ans = new ArrayList<>();

int[] nums = { 1, 2, 3 };

dfs(nums, new ArrayList<Integer>(), ans);

System.out.println(ans);

}

public static void dfs(int[] nums, List<Integer> tmp, List<List<Integer>> ans) {

System.out.println(Arrays.toString(nums) + "," + tmp);

if (tmp.size() == nums.length) {

ans.add(new ArrayList<>(tmp));

} else {

for (int num : nums) {

if (!tmp.contains(num)) {

tmp.add(num);

dfs(nums, tmp, ans);

tmp.remove(tmp.size() - 1);

}

}

}

}

}

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表