您的位置:首页 > 其它

LeetCode - Generate Parentheses

2015-04-09 23:05 211 查看
https://leetcode.com/problems/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:

"((()))", "(()())", "(())()", "()(())", "()()()"

这道题我是用递归做的,在当前递归中,如果左括号没用完的话,肯定可以再加一个左括号,如果右括号的数目小于左括号的话,肯定可以加一个右括号。知道最后左右括号都用完了,就把当前结果加入到返回的结果中。
public class Solution {
public List<String> generateParenthesis(int n) {
List<String> rst = new LinkedList<String>();
if(n<=0) return rst;
StringBuilder sb = new StringBuilder();
helper(rst, sb, n, 0, 0);
return rst;
}
public void helper(List<String> rst, StringBuilder sb, int n, int left, int right){
if(left==n && right==n){
rst.add(sb.toString());
return;
}
if(left>n || right>n) return;
if(left < n){
sb.append('(');
helper(rst, sb, n, left+1, right);
sb.deleteCharAt(sb.length() - 1);
}
if(right <left){
sb.append(')');
helper(rst, sb, n, left, right+1);
sb.deleteCharAt(sb.length() - 1);
}
}
}


空间复杂度O(n),时间复杂度O(2^n),解释见这里:

http://stackoverflow.com/questions/19609902/print-all-validate-parentheses-how-does-the-recursive-work-here
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: