给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
思考
生成括号有如下几个特点:
1.左括号和右括号的数目都是对数n
2.必须先写一个左括号,才能写出一个右括号
private List<String> results = new ArrayList<>();
public List<String> generateParenthesis(int n) {
char str[] = new char[n * 2];
backtracking(0, 0, n, 0, str);
return results;
}
private void backtracking(int left, int right, int n, int length, char str[]) {
if (left > n || right > n || right > left) {
return;
}
if (length == n * 2) {
results.add(new String(str));
return;
}
str[length] = '(';
backtracking(left + 1, right, n, length + 1, str);
str[length] = ')';
backtracking(left, right + 1, n, length + 1, str);
}