标签:common int list 分享 技术 str racket ges gen
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);
标签:common int list 分享 技术 str racket ges gen
原文地址:http://www.cnblogs.com/Revenent-Blog/p/7427910.html