括号生成

数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。

提示:

  • 1 <= n <= 8

22.括号生成

看到输入范围是[1,8]有没有让你产生一个大胆的想法

很明显的一个递归(其实回溯也行只是我懒得写),递归出口就是左括号和右括号数目均符合条件,记上这个可行解就行。对于左括号或者右括号的数目大于目标值,以及右括号的数目多于左括号的情况,明显是不可行解,直接退出就行。

然后就是很简单的递归了我只能说懂的都懂

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> ans;
generate(0, 0, n, "", ans);
return ans;
}
void generate(int leftCount, int rightCount, int target, string curr, vector<string>& ans){
if(leftCount == target && rightCount == target){
ans.push_back(curr);
}
if(rightCount > target || leftCount > target || rightCount > leftCount){
return;
}
generate(leftCount + 1, rightCount, target, curr + '(', ans);
generate(leftCount, rightCount + 1, target, curr + ')', ans);
}
};
Contents
|