zoukankan      html  css  js  c++  java
  • 程序员面试金典-面试题 08.09. 括号

    题目:

    括号。设计一种算法,打印n对括号的所有合法的(例如,开闭一一对应)组合。

    说明:解集不能包含重复的子集。

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

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

    分析:

    dfs搜索,如果当前左括号用超了,右括号用超了,或者右括号的数量大于左括号的数量直接返回。

    而如果左右括号刚好用尽,代表生成一个结果,记录下来。

    然后就是递归,添加左括号,右括号。

    程序:

    class Solution {
        public List<String> generateParenthesis(int n) {
            res = new ArrayList<>();
            StringBuilder str = new StringBuilder();
            generateParenthesis(0, 0, n, str);
            return res;
        }
        private void generateParenthesis(int l, int r, int n, StringBuilder str){
            if(r > n || l > n || r > l)
                return;
            if(r == n && l == n){
                res.add(str.toString());
                return;
            }
            generateParenthesis(l+1, r, n, new StringBuilder(str).append("("));
            generateParenthesis(l, r+1, n, new StringBuilder(str).append(")"));
        }
        private List<String> res;
    }
  • 相关阅读:
    solr 简要笔记
    JQuery select 编程时选中原有的值
    java设计模式图
    java设计模式
    qq空间微博等更多社交平台分享
    API调用开发demo
    fastJson
    小程序开发
    史上最全的机器学习资料(上)
    大数据”学习资源(下)
  • 原文地址:https://www.cnblogs.com/silentteller/p/12462037.html
Copyright © 2011-2022 走看看