zoukankan      html  css  js  c++  java
  • leetcode刷题笔记二十二 括号生成 Scala版本

    leetcode刷题笔记二十二 括号生成 Scala版本

    源地址:22. 括号生成

    问题描述:

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

    For example, given n = 3, a solution set is:

    [
      "((()))",
      "(()())",
      "(())()",
      "()(())",
      "()()()"
    ]
    

    代码补充:

    //方法一:DFS
    object Solution {
        var ans = List[String]()
        def generateParenthesis(n: Int): List[String] = {
            //当n=0时,返回空列表
            if (n == 0) return List()
    
            //当n!=0时,共出现n个左括号,n个右括号
            var left = n
            var right = n
            ans = List[String]()
            var tempAns = ""
            dfs(left, right, "")
            return ans
        }
        
    	
        def dfs(left:Int, right:Int, tempAns:String):Unit={
            //若右括号比左括号多,这种情况不匹配,直接返回
            if (left > right) return 
            //若左、右括号匹配,且左、右括号均以完成n次,将这一次结果加
            //入答案
            if ( left == 0 && right == 0 ) {
                ans = ans :+ tempAns
                return
            }
            //左边未进行完,进行一次左括号
            if (left != 0) dfs(left-1, right, tempAns+'(' )
            //右边未进行完,进行一次右括号
            if (right != 0) dfs(left, right-1, tempAns+')')
        }
    }
    
    //方法二:动态规划
    //对于n对括号,最外侧肯定有一对括号l,剩下n-1对括号或位于l内侧,或者位于l外侧
    //初始状态:F(0) = 0
    //状态转换:F(n) = "(" + F(i) + ")" + F(j),其中0 <= i,j <= n-1 且 i+j = n-1
    object Solution {
        def generateParenthesis(n: Int): List[String] = {
            var ans = List[String]()
            //将F(0)视为空串
            if (n == 0) ans = ans :+ ""
            //需进行n-1次匹配	
            for(i <- 0 until  n){
                //括号内
                val left = generateParenthesis(i)
                //括号外
                val right = generateParenthesis(n-1-i)
                
                for (elemL <- left){
                    for (elemR <- right){
                        println("i: " + i)
                        println("j: " + (n-1-i).toString)
                        println("left: "+left)
                        println("right: "+right)
                        
                        ans = ans :+  ("(" + elemL + ")" + elemR )
                    }
                }
            }
            return ans
        }
    }
    
  • 相关阅读:
    HashMap Hashtable LinkedHashMap 和TreeMap
    RestTemplate -springwebclient
    IntelliJ IDEA 12:
    mac安装RabbitMQ
    mysql 常用,使用经验
    消息中间件性能究竟哪家强?
    log4j2配置文件log4j2.xml
    内存增长 避免
    nginx 服务器重启命令,关闭
    jquery获取css color 值返回RGB
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/12741294.html
Copyright © 2011-2022 走看看