LeetCode22:括号生成
括号生成
数字 n
代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例 1:
输入:n = 3 输出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:
输入:n = 1 输出:["()"]
解题思路
使用递归的思想,递归的结束条件是,左右两边加入的括号都为n,即 l=0, r=0。如果l>0,后者r>0,依次加入对应的括号。
Java代码
class Solution {
public List<String> generateParenthesis(int n) {
List<String> result = new ArrayList<>();
if (n == 0){
return result;
}
helpler(n, n,"", result);
return result;
}
public void helpler(int l, int r, String item, List<String> result){
if (r < l){
return;
}
if (l == 0 && r ==0){
result.add(item);
}
if (l > 0){
helpler(l-1, r, item + '(', result);
}
if (r > 0){
helpler(l, r-1,item + ')', result);
}
}
}
Python代码
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
if n == 0:
return []
result = []
self.helpler(n,n,'',result)
return result
def helpler(self, l, r, item, result):
if r < l:
return
if l == 0 and r == 0:
result.append(item)
if l > 0:
self.helpler(l-1, r, item + '(', result)
if r > 0:
self.helpler(l, r-1, item + ')', result)