分治算法-leetcode#22-生成n个括号对

博客介绍了使用分治算法解决LeetCode第22题的方法,即如何生成所有有效的n个括号对组合。在优化后的解法中,通过将n拆分为两部分并递归生成左右括号序列,然后进行组合。内容提到在最初的解决方案中忽略了括号对数为零的情况,而修正后的方案从n=0开始,确保涵盖了所有可能的括号序列,同时避免了结果的重复。
摘要由CSDN通过智能技术生成
class Solution {
public:
    vector<string> generateParenthesis(int n) {
        vector<string> res;
        if(n<=0) return res;
        generate(res,n); 
        return res;      
    }
    void generate(vector<string> & res,int n){
        if(n==0) {res.push_back("");return;}//如果n为0,则空串
        vector<string> sub;
        for(int i=0;i<n;i++){//左边i个括号,右边n-i个括号,
            vector<string> left,right;
            generate(left,i);
            generate(right,n-i-1);
            for(string l:left)
                for(string r:right){
                    res.push_back("("+l+")"+r);
                }
        }
        return;   
    }
};

上面是优化后的解。

这题目,拿到,想的就是把n拆成两个数之和,求得各自结果,再连接到一起,然后for循环中是从1开始到小于n,左边i个括号,右边n-i-1个括号,剩下一个括号看着放哪,然后找到6个位置,而且还需要判断不重复ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值