题目详情:
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例 1:
输入:n = 3 输出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:
输入:n = 1 输出:["()"]
提示:
- 1 <= n <= 8
代码实现:
 
class Solution {  ArrayList[] cache = new ArrayList[100];  public List<String> generate(int n) {  // 如果缓存中已经存在对应n的括号组合,则直接返回  if (cache[n] != null) {  return cache[n];  }  // 创建一个新的ArrayList来存储答案  ArrayList<String> ans = new ArrayList<String>();  // 如果n为0,则直接添加一个空字符串到答案列表中  if(n == 0) {  ans.add("");  } else {  // 遍历所有可能的左括号数量  for(int c = 0; c < n; ++c) {  // 遍历所有可能的左括号组合  for(String left: generate(c)){  // 遍历所有可能的右括号组合  for(String right: generate(n-1-c)) {  // 将左括号组合、右括号组合和它们之间的括号拼接,并添加到答案列表中  ans.add("(" + left + ")" + right);  }  }  }  }  // 将答案列表存储到缓存中  cache[n] = ans;  // 返回答案列表  return ans;  }  // 提供一个公共接口来生成n对括号的所有可能组合  public List<String> generateParenthesis(int n) {  return generate(n);  }  
}