LeetCode 括号生成
22.括号生成
题目描述
数字 n
代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例 1:
输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:
输入:n = 1
输出:["()"]
提示:
1 <= n <= 8
解题思路
感觉这道题重要的是弄懂“如何判断括号是有效的”,加左括号的条件是left<n
,加右括号的条件是right<left
第一个位置永远放的都是左括号,每对组合里都是n
个左括号,n
个右括号
- 字符串也可以用
push_back()
函数添加字符,但注意括号里是单引号’’
代码
class Solution {
public:
//括号配对规律,怎么检查他是有效的?3对,层数呢vector<string> generateParenthesis(int n) {vector<string> res;int left=0,right=0;string temp;dfs(res,temp,left,right,n);return res;}void dfs(vector<string>& res,string temp,int left,int right,int n){if(left==n&&right==n){res.push_back(temp);return;}if(left<n){temp.push_back('(');dfs(res,temp,left+1,right,n);temp.pop_back();}if(right<left){temp.push_back(')');dfs(res,temp,left,right+1,n);temp.pop_back();}}
};