zoukankan      html  css  js  c++  java
  • leetcode刷题笔记四十六 全排列

    leetcode刷题笔记四十六 全排列

    源地址:46. 全排列

    问题描述:

    给定一个 没有重复 数字的序列,返回其所有可能的全排列。

    示例:

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

    代码补充:

    //结合DFS与回溯法
    //res => 存储排列结果
    //path => 记录单次遍历的路径
    //used => 记录本次遍历使用过的节点
    //全排列过程实际是进行一次深度遍历的过程
    //length => 目标长度,构成排列的高度
    //depth => 目前遍历的层次,树高
    import scala.collection.mutable
    object Solution {
        def permute(nums: Array[Int]): List[List[Int]] = {
          val length = nums.length
          if (length == 0) return List()
    
          var res = mutable.ListBuffer[List[Int]]()
          var path = mutable.ListBuffer[Int]()
          var used = mutable.Set.empty[Int]
    
          dfs(nums, length, 0, path, used, res)
          return res.toList
        }
    
        def dfs(nums:Array[Int], length:Int, depth:Int, path:mutable.ListBuffer[Int], used:mutable.Set[Int], res:mutable.ListBuffer[List[Int]]) : Unit = {
          //完成一次遍历,将结果保存于res中,返回
          if (depth == length) {
            res += (path.toList)
            return
          }
    
          for(i <- nums.indices){
            //当前结果尚未遍历
            if(used.contains(nums(i)) == false){
              //路径更新,使用节点更新
              path += nums(i)
              used += nums(i)
              //接着遍历下一个未访问过的节点
              dfs(nums, length, depth+1, path, used, res)
              //回溯
              path -= nums(i)
              used -= nums(i)
            }
          }
        }
    }
    
  • 相关阅读:
    一个奇怪的网页bug 竟然是局域网DNS搞的鬼
    繁体系统下如何快速将简体安装文件乱码恢复正常?
    Ubuntu16.04LTS国内快速源
    bitnami redmine版本由2.3.1升级至3.2.2过程
    Ubuntu1404安装gogs过程
    AJAX
    jQuery 事件解释
    安装phpMyadmi报错
    总结二
    总结
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/13227450.html
Copyright © 2011-2022 走看看