博客
关于我
leetcode题解46-全排列
阅读量:797 次
发布时间:2023-01-31

本文共 1738 字,大约阅读时间需要 5 分钟。

解决这个问题的方法是使用深度优先搜索(DFS)回溯法,每次递归选择下一个元素,并尽量深入,直到所有位置都填满,这样得到一个完整的全排列。

逐个工作流程:

  • 初始化变量

    • 保存所有结果的集合(例如List)。
    • 标记数组(visited),记录每个元素是否已被使用。
    • 数组(digits),保存当前的排列。
  • DFS递归函数

    • 当已选位置(k)等于数组长度时,将当前排列添加到结果中。
    • 否则,遍历数组中的每个元素:
      • 如果未被访问过,选择该元素,更新digits并访问标记。
      • 进行递归到下一个位置(k+1)。
      • 递归返回后,撤销当前选择,删除digits的最后一个元素并取消标记。
  • 主函数

    • 初始化变量。
    • 调用DFS函数,从位置0开始。
  • 这样的方法确保所有可能的排列都会生成,且每个排列都是唯一的。

    以下是示例代码:

    import java.util.ArrayList;import java.util.List;public class Solution {    List
    > lists = new ArrayList<>(); int len; int[] digits = new int[len]; boolean[] visited = new boolean[len]; public List
    > permute(int[] nums) { len = nums.length; digits = new int[len]; visited = new boolean[len]; lists = new ArrayList<>(); dfs(nums, 0); return lists; } void dfs(int[] nums, int k) { if (k == len) { //生成一个完整的排列 List
    list = new ArrayList<>(); for (int i : digits) { list.add(i); } lists.add(list); return; } else { for (int i = 0; i < nums.length; i++) { if (!visited[i]) { digits[k] = nums[i]; visited[i] = true; dfs(nums, k + 1); //撤销选择,恢复现场 digits[k] = 0; visited[i] = false; } } } } public static void main(String[] args) { int[] nums = {1, 2, 3}; System.out.println(new Solution().permute(nums)); }}

    代码解释

    • permute方法初始化变量,调用DFS方法,从位置0开始。
    • dfs方法递归地选择每个元素。如果k等于数组长度,生成排列并保存。否则,逐个尝试未被使用的元素,进行递归,回溯后恢复现场。
    • visited数组确保每个元素只被使用一次,防止重复计算。

    这个方法确保了所有可能的全排列都被生成,且高效地进行回溯,保证性能。

    转载地址:http://negyk.baihongyu.com/

    你可能感兴趣的文章
    No qualifying bean of type XXX found for dependency XXX.
    查看>>
    No qualifying bean of type ‘com.netflix.discovery.AbstractDiscoveryClientOptionalArgs<?>‘ available
    查看>>
    No resource identifier found for attribute 'srcCompat' in package的解决办法
    查看>>
    no session found for current thread
    查看>>
    No static resource favicon.ico.
    查看>>
    no such file or directory AndroidManifest.xml
    查看>>
    No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
    查看>>
    NO.23 ZenTaoPHP目录结构
    查看>>
    no1
    查看>>
    NO32 网络层次及OSI7层模型--TCP三次握手四次断开--子网划分
    查看>>
    NOAA(美国海洋和大气管理局)气象数据获取与POI点数据获取
    查看>>
    NoClassDefFoundError: org/springframework/boot/context/properties/ConfigurationBeanFactoryMetadata
    查看>>
    node
    查看>>
    node exporter完整版
    查看>>
    node HelloWorld入门篇
    查看>>
    Node JS: < 一> 初识Node JS
    查看>>
    Node JS: < 二> Node JS例子解析
    查看>>
    Node Sass does not yet support your current environment: Linux 64-bit with Unsupported runtime(93)解决
    查看>>
    Node Sass does not yet support your current environment: Windows 64-bit with Unsupported runtime(72)
    查看>>
    Node 裁切图片的方法
    查看>>