zoukankan      html  css  js  c++  java
  • 算法题之生成括号组合

    题目: Generate Parentheses

    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。

    • 如果左括号还能括就不断的画左括号,直到左括号的数量等于n。
    • 接下来考虑右括号,因为对于一对括号,右括号不能出现在左括号前,所以当右括号数量小于左括号时,加上右括号。
    • 当左右括号数量都等于n时,得到解。

    这种策略可以保证每一步都是一个全新的解。

    public class Solution {
        public ArrayList<String> generateParenthesis(int n) {
            ArrayList<String> strings = new ArrayList<String>();
            if (n == 0) return strings;
    
            dfs(0, 0, "", strings, n);
    
            return strings;
        }
    
        private void dfs(int left, int right, String buffer, ArrayList<String> strings, int n) {
            if (left == n && right == n) {
                strings.add(buffer);
                return;
            }
    
            if (left < n) {
                dfs(left + 1, right, buffer + "(", strings, n);
            }
    
            if (left > right) {
                dfs(left, right + 1, buffer + ")", strings, n);
            }
        }
    }
  • 相关阅读:
    MYSQL导入,导出命令。
    MySQL修改,表结构大幅修改
    Ajax
    js和jQuery的日常
    freemarker 分页取值
    Timer定时任务
    汉字相似度比较
    读取Properties键值对
    Python+requests+unittest+excel实现接口自动化测试框架
    Android App 压力测试方法(Monkey)
  • 原文地址:https://www.cnblogs.com/shixiangwan/p/9466594.html
Copyright © 2011-2022 走看看