leetcode括号生成

1.深度优先搜索

设l,r记录生成过程中 (  和  )  的数量,可以理解为以*根节点,每个节点的左子节点是(,右子节点是),在生成的过程中若r>l,则返回上一层,若l=r=n,则说明生成结束,记录当前生成的信息

如下:

class Solution {
public:
    vector<string> generateParenthesis(int n) {
        //可以理解为以(为根节点的二叉树,其左子节点为(,右子节点为),求所有的情况,任何时候)的数量大于(的数量则返回
        //l=r=n,则记录
        vector<string> res;
        dfs(res,"",0,0,n);
        return res;   
    }
    void dfs(vector<string>&res,string str,int l,int r,int n)
    {
        if(l>n||r>n||r>l)
          return ;
        if(l==n&&r==n)
        {
            res.push_back(str);
            return ;
        }
        dfs(res,str+'(',l+1,r,n);
        dfs(res,str+')',l,r+1,n);
        return ;
    }
};

2.广度优先搜索

猜你喜欢

转载自blog.csdn.net/qq_38196982/article/details/105285863