LeetCode-22 括号生成

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/generate-parentheses

题目描述

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

 

示例 1:

输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:

输入:n = 1
输出:["()"]
 

提示:

1 <= n <= 8

解题思路

由于n取值范围很小,所以可以直接进行模拟,对于n来说,组成的字符串将有2n个位置,每个位置在'('数量小于n时,可以设置为'(',在'(' 数目大于')'时,可以设置为')',通过枚举所有可能得解。

代码展示

class Solution {
public:
    vector<string> mvstrRet;
    int mN;
    void dfs(int left, int right, string &str)
    {
        if(right == mN)
        {
            mvstrRet.push_back(str);
            return;
        }
        if(left < mN)
        {
            str.push_back('(');
            dfs(left + 1, right, str);
            str.pop_back();
        }
        if(left > right)
        {
            str.push_back(')');
            dfs(left, right + 1, str);
            str.pop_back();
        }         
        return;
    }
    vector<string> generateParenthesis(int n) {
        mN = n;
        string str;
        dfs(0, 0, str);
        return mvstrRet;
    }
};

 

运行结果

 

 

posted @ 2022-03-14 09:20  过客匆匆,沉沉浮浮  阅读(41)  评论(0)    收藏  举报