刚看到这道题的时候,我想着大家一定会联想的一道给一个括号有效性的判断,那道题的解法是通过一个栈的出栈和入栈来进行判断的,所以刚开始做这道题的时候我总是往那里想,导致思路不对(有时候思路对了就成功了一半)。 我也是看了官网的解法:通过回溯的思想,画出树状图是一个满二叉树,使用深度优先遍历(dfs)
private static void generate(int n, int left, int right, String s, List<String> res) {
// 左右的括号的个数都==n的时候说明这个括号已经生成完毕
if (left == n && right == n) {
res.add(s);
return;
}
// 左括号
if (left < n) {
generate(n, left + 1, right, s + "(", res);
}
// 右括号
if (left > right) {
generate(n, left, right + 1, s + ")", res);
}
}