leetcode(力扣)第二十二题:括号生成_C++

本文探讨了一种使用深度优先搜索(DFS)递归算法解决括号有效组合问题的方法。代码简洁但直接,通过不断放置左括号和右括号来生成所有可能的n对括号组合。尽管此方法直观,但作者认为它缺乏对问题数学结构的理解,并提出括号操作的两种基本形式:并列和嵌套。尽管时间复杂度固定,但作者对于是否存在更优雅的数学模型表示这一问题表示疑惑。
摘要由CSDN通过智能技术生成
class Solution {
public:
    vector<string> ans;
    void put(int L, int R, string t){
        if(L==0){
            while(R--!=0) t+=')';
            ans.push_back(t);
        }
        else{
            put(L-1,R,t+'(');
            if(L<R)
                put(L,R-1,t+')');
        }
    }
    vector<string> generateParenthesis(int n) {
        put(n,n,"");
        return ans;
    }
};

依据深度优先遍历写出来的简单的递归,相当简单,相当粗暴。左括号一列,右括号一列,在左括号剩余数目小于右括号剩余数目时,放左括号或右括号都行;若是剩余数目相等则只能放左括号;不存在左括号剩余数目少于右括号的情况。这道题应该是一道数学问题才对,这样虽然很容易能解出答案,但是也很粗鲁,完全没有理解这道题的数学结构。
官方的答案是什么奇奇怪怪的东西?就没有一种数学模型能描述之吗
括号的操作其实就两种:并列和嵌套。然后就想不出来力(悲
题目要求是8个以下的括号,因此输出的复杂度是固定的,纠结于时间其实没必要,反正只要不重复输出,那时间复杂度固定就那么点,正巧我这个就不会重复输出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值