题目要求:
分析:
这道题目利用递归。具体思路如下:
- 观察题目,返回的是一个集合,所以要new一个list;
- 设置left和right来分别代表’ ( ‘和’ ) '剩余的个数,初始个数均等于n;
- 根据left和right的值的关系来判断应该是加’ ( ‘还是’ ) ‘:
当right > left时,此时可加入’ ) ‘,再进行递归。注意right是绝对大于等于left的,因为无论怎样,都是从’ ( ‘开始添加的;
当left > 0时,此时可加入’ ( ',再进行递归;
当left = right = 0时,表示所有的左右括号全部加完,结束。
具体代码如下:
class Solution {
List<String> list = new ArrayList<>();
public List<String> generateParenthesis(int n) {
match("", n, n);
return list;
}
public void match(String nowStr, int left, int right) {
if(left == 0 && right == 0) {
list.add(nowStr);
return;
}
if(right > left) {
match(nowStr + ")", left, right - 1);
}
if(left > 0) {
match(nowStr + "(", left - 1, right);
}
}
}