zoukankan      html  css  js  c++  java
  • 全排列

    给定一个n找到从1到n的全排列:

    首先给定一个[]

    第一层:可以放1 , 2 ,3 ,4 ... n

    加入进入1,第二层可以放 2 ,3 ,4,5...n

    。。。到达第n层即返回一个结果

    1.定义一个used的数组:表示哪些数已经被使用了

    boolean[] used = new boolean[n+1];

    2.定义一个栈表示当前所在的层次

    Deque<Integer> deque = new ArrayDeque<>();

    3.深度优先遍历:

    dfs(int cur, int n, boolean[] used, Deque<Integer> deque)

    if(cur==n){

      达到第n层返回一个结果: deque.toArray().sout();

    }

    for(int i=1;i<=n;i++){

      if(used[i]){continue;} // 当前数已经使用跳过

      deque.addLast(i);// 放入栈中

      used[i] = true;// 设置为已使用

      dfs(cur+1,n,used,deque);// 深度优先递归

      deque.removeLast(i)// 回溯取出

      used[i] = false;// 回溯设置

    }

    时间复杂:O(n*n!)

    空间复杂:O(n*n!)

  • 相关阅读:
    并查集基础练习
    HDU1232——畅通工程
    二分答案——划分数列
    二分答案——收入计划
    动态规划练习题(2)
    动态规划程序设计2
    动态规划练习题(1)
    0/1背包
    P5024 保卫王国[倍增+dp]
    UVA11424 GCD
  • 原文地址:https://www.cnblogs.com/wsZzz1997/p/14759230.html
Copyright © 2011-2022 走看看