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