zoukankan      html  css  js  c++  java
  • 括号生成

    描述:

    给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。

    示例:

    例如,给出 n = 3,生成结果为:

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

    思路:

    这道题可以用回溯法解决,即穷举出所有可能,再按照规则过滤结果。但是更好的办法是在回溯的过程中,就进行规则的判断,进行剪枝操作:

    只有在我们知道序列仍然保持有效时才添加 '(' or ')',我们可以通过跟踪到目前为止放置的左括号和右括号的数目来做到这一点,

    如果我们还剩一个位置,我们可以开始放一个左括号。 如果它不超过左括号的数量,我们可以放一个右括号。

    java:

    class Solution {
        /**
         * 主方法.
         *
         * @param n 括号个数
         * @return 合法括号集合
         */
        public List<String> generateParenthesis(int n) {
            List<String> resultList = new ArrayList<>(10);
            helper(resultList, "", 0, 0, n);
            return resultList;
        }
    
        /**
         * 功能方法.
         *
         * @param list  有效括号集合
         * @param temp  字符串
         * @param open  左括号个数
         * @param close 右括号个数
         * @param n     括号个数
         */
        private void helper(List<String> list, String temp, int open, int close, int n) {
            if (open == n && close == n) {
                list.add(temp);
                return;
            }
            if (open < n) {
                helper(list, temp + "(", open + 1, close, n);
            }
            if (close < open) {
                helper(list, temp + ")", open, close + 1, n);
            }
        }
    }

    结果:

    python3:

    class Solution:
        def generateParenthesis(self, n: int) -> List[str]:
            lists = []
    
            def helper(tmp='', open=0, close=0):
                if open == n and close == n:
                    lists.append(tmp)
                    return
                if open < n:
                    helper(tmp + '(', open + 1, close)
                if close < open:
                    helper(tmp + ')', open, close + 1)
    
            helper()
            return lists

    结果:

  • 相关阅读:
    day3-python之函数进阶(三)
    day3-python之函数初识(二)
    day3-python之文件操作(一)
    tomcat
    集群
    nginx
    nginx--zabbix监控status waiting
    zabbix监控之mysql主从状态&mysql主从延迟
    zabbix监控之进程&日志监控
    zabbix监控流程(监控linux上某个文件是否有改动)
  • 原文地址:https://www.cnblogs.com/nedulee/p/11988602.html
Copyright © 2011-2022 走看看