来源:力扣(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; } };
运行结果