题目详情:
数字 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); }
}