欢迎光临
我们一直在努力

LeetCode热题100 括号生成

题目描述

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

示例 1:

输入 :n = 3
输出 :[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]

示例 2:

输入:n = 1
输出:[“()”]

提示:

1 <= n <= 8

思路

1 当左边的数量>右边的数量,继续放右边一定是合法的。
2 直接进行递归,每次可以选择左边或者右边。
3 可以进行剪枝,当左边用完了就不能选择左边,当右边的数量等于左边的时候也不能选择右边。

代码

class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string>ans;
string s;

// n个左边和n个右边
dfs(n, n, s, ans);

return ans;
}

void dfs(int left_num, int right_num, string &s, vector<string> &ans)
{
if(left_num == 0 && right_num == 0)
{
ans.push_back(s);
return;
}

// 1 选择左边
if(left_num > 0)
{
s.push_back('(');
dfs(left_num 1, right_num, s, ans);
s.pop_back();
}

// 2 选择右边
if(right_num > left_num)
{
s.push_back(')');
dfs(left_num, right_num 1, s, ans);
s.pop_back();
}
}

};

赞(0)
未经允许不得转载:171主机测评 » LeetCode热题100 括号生成
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址