您的位置:首页 > 其它

Generate Parentheses LeetCode解题报告

2017-08-18 10:07 197 查看

题目

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:

[

“((()))”,

“(()())”,

“(())()”,

“()(())”,

“()()()”

]

思路

这种要你穷尽所有可能性的题,一般就会想到递归,在草稿纸上画一下找出其中的规律就好办了,直接看下图:



可以得出规律:

1、开头不是能“)”

2、左括号个数大于右括号个数时,接下来的括号随意。

3、当左右括号数目相等时,接下来的必须要是左括号。

4、又括号的个数不能大于左括号个数,当左右括号都用完时,返回。

代码

这里left和right的意思分别表示还剩下的左括号个数和右括号个数。

public List<String> generateParenthesis(int n) {
List<String> list = new ArrayList<String>();
generateParentheses(n,n,"",list);
return list;
}

public void generateParentheses(int left,int right,String curStr,List<String> list){
//左右括号用完了,返回
if(left == 0 && right == 0){
list.add(curStr);
return;
}
//只要还有左括号,就能使用
if(left > 0){
generateParentheses(left-1,right,curStr+"(",list);
}
//还有右括号且剩下的右括号必须多余剩下的左括号
if(right > 0 && left < right){
generateParentheses(left,right-1,curStr+")",list);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 回溯算法