递归生成n个括号的所有组合

递归生成n个括号的所有组合

输入

1
2
3

输出

()

(())
()()

((()))
(()())
(())()
()(())
()()()

思路

  • 其实仔细观察生成的结果就能发现,输出的结果是能打做左括号就先打左括号,左括号打完再打右括号,这个可以反应在递归程序里

  • 要说注意的点,就是传参不要传引用,每次都复制一份新的字符串,最后再打印。

code

//
//  BracketPrint.cpp
//  cpp
//
//  Created by 风清扬 on 2021/8/19.
//

#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;

void BracketPrint(int leftRem, int rightRem, string ts){
    if(leftRem == 0 && rightRem == 0){ // 递归结束条件
        cout << ts << endl;
        return;
    }
    if(leftRem > 0){ // 先打印左括号
        string ts1 = ts + '('; // 这里要注意,是新建一个string
        BracketPrint(leftRem - 1, rightRem, ts1);
    }
    if(rightRem > leftRem){ // 如果能够打印右括号,有括号的触发条件不是有remian就可以随便打印的。
        string ts1 = ts + ')'; // 这里同理,新建一个string
        BracketPrint(leftRem, rightRem - 1, ts1);
    }
}

int main(){
    int n;
    while(cin>>n){
        string s = "";
        BracketPrint(n, n, s);
    }
    return 0;
    
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值