一、括号生成
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例 1:
输入: n = 3
输出: ["((()))","(()())","(())()","()(())","()()()"]
示例 2:
输入:n=1
输出:["()"]
二、解题思路
public class Solution {
public IList<string> GenerateParenthesis(int n) {
//创建一个列表,最终存储结果集
List<String> result = new List<String>();
//调用静态方法,n代表需要组成的括号次数
backtracking(n, result, 0, 0, "");
//返回最终列表结果
return result;
}
public static void backtracking(int n, List<String> result, int left, int right, String str) {
//如果右边括号次数大于左边的括号次数,表明当前是不成立的,直接return,执行下一次
if (right > left) {
return;
}
//如果当前左括号等于要组成的括号次数,并且当前右括号等于要组成的括号次数,则表示当前满足结果集,添加到列表中即可
if (left == n && right == n) {
result.Add(str);
return;
}
//如果左括号次数小于组成括号的次数,表明还有左括号与之有括号对应,继续调用自身,递归
if (left < n) {
//做括号次数加1,同时str补齐左括号
backtracking(n, result, left+1, right, str+"(");
}
//如果右括号次数小于左括号次数,表明还有右括号要与左括号对应,继续递归配对
if (right < left) {
//右括号次数加1,同时str补齐右括号
backtracking(n, result, left, right+1, str+")");
}
}
}