生成括号

题目

  • Generate Parentheses

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
For example, given n = 3, a solution set is:
“((()))”, “(()())”, “(())()”, “()(())”, “()()()”

题目大意

给定n对括号,编写一个函数来生成所有的符合格式的括号组合。
上面给出了n = 3的例子。

思路

用递归来做。
注意几点递归条件:
(1)左右括号均用完是递归出口;
(2)左括号没有用完就加一个左括号;
(3)只有右括号少于左括号且右括号没有用完时才能加右括号,因为不能出现“ )( ”这样的情况。

  • 关键:当前位置左括号不少于右括号;
  • 节点:目前位置左括号和右括号数(x,y)(x>=y);
  • 边:从(x,y)到(x+1,y)和(x,y+1),x==y时,没有(x,y+1)这条边;
  • 解:是从(0,0)出发到(n,n)的全部路径。

代码

#include<iostream>
#include<vector>
using namespace std;
void help_fun(int, int, string, vector<string >&);
vector<string> generateParenthesis(int n)
{
    vector<string > v;
    help_fun(n, n, "", v);
    return v;
}
void help_fun(int x, int y, string s, vector<string > &v)
{
    if(x == 0 && y == 0)
    {
        v.push_back(s);
        return;
    }
    if(x > 0)
        help_fun(x-1, y, s+"(", v);
    if(x<y && y>0)
        help_fun(x, y-1, s+")", v);
}
int main()
{
    vector <string > v;
    int n;
    cin >> n;
    v = generateParenthesis(n);
    for(int i=0; i<v.size(); i++)
    {
        cout<<v[i]<<endl;
    }
    return 0;
}

以上。


版权声明:本文为博主原创文章,转载请注明出处。
个人博客地址:https://yangyuanlin.club
欢迎来踩~~~~


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值