LintCode刷题——生成括号

Posted Revenent

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LintCode刷题——生成括号相关的知识,希望对你有一定的参考价值。

427-生成括号

题目:给定 n 对括号,请写一个函数以将其生成新的括号组合,并返回所有组合结果。

样例:给定 n = 3, 可生成的组合如下:"((()))", "(()())", "(())()", "()(())", "()()()"

算法:对于给定的n,定义一个result字符串,当字符串中的\'(\'的数目大于\')\'的数目,则该字符串中可以拼接\'(\'或\')\';

    否则,result中只能拼接\'(\'。递归终止条件为左括号数目与n相同,此时只能在result中插入右括号。递归表达式为:

        T(i+1)  = T(i) + \'(\'        当i<n时; 

           T(i+1) = T(i) + \')\'   当i<n 且result中\'(\'数多于\')\';                                 

代码:

public class Solution {
    /**
     * @param n n pairs
     * @return All combinations of well-formed parentheses
     */
    
    public void generateBracket(ArrayList<String> result, int n, int lBraNums, int rBraNums, String item ){
        if(lBraNums==n){
            for(int i=0;i<n-rBraNums;i++){
                item+=\')\';
            }
            result.add(item);
            return;
        }
        else{
            generateBracket(result,n,lBraNums+1,rBraNums,item+\'(\');
            if(lBraNums>rBraNums){
                generateBracket(result,n,lBraNums,rBraNums+1,item+\')\');
            }
        }
    } 
    
    public ArrayList<String> generateParenthesis(int n) {
        // Write your code here
        ArrayList<String> result = new ArrayList<String>();
        generateBracket(result,n,0,0,"");
        return result;
    }
}

算法复杂度:

        由于T(i)由T(i-1)的两种方式决定,故算法复杂度为O(2^n);

     T(i+1)  = 2T(i) + O(1) = 2(2T(i-1) + O(1) ) + O(1) = ....

  所以T = O(2^n);

 

以上是关于LintCode刷题——生成括号的主要内容,如果未能解决你的问题,请参考以下文章

java刷题--22括号生成

#leetcode刷题之路22-括号生成

lintcode 刷题:457 经典二分查找问题

力扣刷题:括号生成(java实现)

力扣刷题:括号生成(java实现)

2021/6/13 刷题笔记括号生成与回溯法(深度优先遍历)