括号生成-C++递归解法-牛客BM60

一、运行结果

二、题目

给出n对括号,请编写一个函数来生成所有的由n对括号组成的合法组合。

例如,给出n=3,解集为:

"((()))", "(()())", "(())()", "()()()", "()(())"

数据范围:1≤n≤8

三、思路

题目要求的是所有由n个左括号和n个右括号组成的有效括号对序列,所谓有效括号对序列,归结起来只有一个要求:从括号串的起始位置到括号串的任意一个位置,右括号的数量不能超过左括号的数量,最终用完n个左括号和n个右括号,这里采用递归的思路求解。具体考虑如下:

1)若n个左括号没有用完,则可以考虑添加一个左括号;

2)若n个右括号没有用完,并且当前生成的串中左括号的数量大于右括号的数量,则可以考虑添加右括号;

若左括号和右括号都已经使用了n个,则当前括号串就是一个有效的括号对序列,将其加入到结果数组中。

四、代码

class Solution {
public:
    //l和r分别是已经tmp中已经使用的左括号和右括号个数
    void recursion(int l, int r, string tmp, vector<string> &res, int n){
        if(l == n && r == n){
            res.emplace_back(tmp);
            return;
        }
        if(l < n) //左括号未用完,考虑添加左括号
            recursion(l+1, r, tmp+'(', res, n);
        if(r < n && l > r) //右括号用的比左括号少,考虑添加右括号
            recursion(l, r+1, tmp+')', res, n);
    }
    vector<string> generateParenthesis(int n) {
        vector<string> ans;
        string tmp = "";
        recursion(0, 0,tmp, ans, n);
        return ans;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当表头的层数比较多时,可以使用归的方式来生成多级表头。以下是一个示例代码: ```html <el-table :data="tableData" style="width: 100%"> <template v-for="(column, index) in columns"> <template v-if="!column.children"> <el-table-column :key="column.prop" :prop="column.prop" :label="column.label"></el-table-column> </template> <template v-else> <el-table-column :key="column.prop" :label="column.label" :align="column.align"> <template slot="header"> <el-row> <el-table-column v-for="(subColumn, subIndex) in column.children" :key="subColumn.prop" :prop="subColumn.prop" :label="subColumn.label" :width="subColumn.width" :align="subColumn.align"></el-table-column> </el-row> </template> <template v-if="column.children"> <template v-for="(subColumn, subIndex) in column.children"> <el-table-column v-if="!subColumn.children" :key="subColumn.prop" :prop="subColumn.prop" :label="subColumn.label"></el-table-column> <el-table-column v-else :key="subColumn.prop" :label="subColumn.label"> <template slot="header"> <el-row> <el-table-column v-for="(subSubColumn, subSubIndex) in subColumn.children" :key="subSubColumn.prop" :prop="subSubColumn.prop" :label="subSubColumn.label" :width="subSubColumn.width" :align="subSubColumn.align"></el-table-column> </el-row> </template> </el-table-column> </template> </template> </el-table-column> </template> </template> </el-table> ``` 在上述代码中,`columns` 是一个数组,用于存储表头列的属性。如果一个表头列具有子列,则在该列对象中添加 `children` 属性,该属性的值也是一个数组,存储子列的属性。在渲染表头时,首先使用 `v-for` 循环遍历 `columns` 数组,判断当前列是否有子列,如果没有子列,则直接生成表头列;如果有子列,则使用归的方式生成多级表头。 在生成多级表头时,需要注意以下几点: - 在父级表头中,使用 `slot="header"` 来指定子级表头的渲染位置。 - 在子级表头中,使用 `v-if` 判断当前列是否有子级表头,如果没有子级表头,则直接生成表头列;如果有子级表头,则继续生成多级表头。 通过以上方式,就可以生成多级表头。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值