前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >生成括号

生成括号

作者头像
小飞侠xp
发布2018-08-29 14:23:57
6790
发布2018-08-29 14:23:57
举报
文章被收录于专栏:书山有路勤为径

已知n组括号,开发一个程序,生成这n组括号所有的合法的组合可能例如:n = 3 结果为:["((())) "," (()())","()(()) "," ()()()"] LeetCode 22. Generate Parentheses

n组括号,括号字符串长度为2*n,字符串中的每个字符有两种选择可能,“(”或“)”,故有2^2n种可能。

递归生成所有可能
代码语言:javascript
复制
#include<stdio.h>
#include<vector>
#include<string>
//当item用来生成的括号字符串,n为数组,result为最终结果
void generate(std::string item, int n , std::vector<std::string> &result ){
  if( i == 2*n)){
      result.push_back(item);
      return ;
  }
  generate( item + '(',n, result );
  generate(item+')',n,result);
}
int main(){
 std::vector<std::string> result;
 generate("",2,result);
 for( int i = 0;i< result.size();i++){
    print("%s\n",result[i].c_str());
}
  return 0;
}

在组成的所有可能中,哪些是合法的? 1.左括号与右括号的数量不可超过n 。 2.每放一个左括号,才可放一个右括号,即右括号 不可先于左括号放置。 故递归需要限制条件: 1.左括号与右括号的数量,最多放置n个。 2.若左括号的数量<=右括号数量,不可进行放 置右括号的递归。

代码语言:javascript
复制
#include<string>
#include<vector>
class Solution{
public:
    std::vector<std::string> generateParenthesis(int n){
        std::vector<std::string> result;
        generate("",nun,result);
        return result;
private:
// 当前还可以放置左括号的数量left,右括号数量right。
    void generate(std::string item , int left, int right, std::vector<std::string> & result){
        if(left == 0 && right == 0){
            result.push_back(item);
            return; 
        }
        if(left > 0 ){
            generate(item+'(',left-1,right,result);
        }
        if(left < right){
            generate(item+')',left,right-1,result);
        }
    }
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.03.17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 递归生成所有可能
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档