给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[ "((()))", "(()())", "(())()", "()(())", "()()()"]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/generate-parentheses
大致思路
以前接触过类似的题目,第一想法就是全排列里面进行删减选择,stl里面也正好有函数可以用。
class Solution {
public:
vector<string> generateParenthesis(int n)
{
int x=n;
vector<string> res;
int* arr = new int[x * 2];
for (int i = 0; i < 2 * x; ++i)
{
if (i % 2 == 0)
arr[i] = 1;
else
arr[i] = -1;
}
do
{
bool flag = true;
int sum = 0;
for (int i = 0; i < 2 * x && flag; ++i)
{
sum += arr[i];
if (sum < 0)