0%

力扣每日一题2021/9/7

题目:22. 括号生成

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

有效括号组合需满足:左括号必须以正确的顺序闭合。

难度:中等

示例 1:

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

示例 2:

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

提示:

  • 1 <= n <= 8

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/generate-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

回溯

解题代码

回溯(参考官方评论区大佬代码)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public List<String> generateParenthesis(int n) {
List<String> ans = new ArrayList<>();
generateParenthesis("", n, n, ans);
return ans;
}

public void generateParenthesis(String str, int left, int right, List<String> ans) {
if (left == 0 && right == 0){
ans.add(str);
return;
}
if (left == right){
generateParenthesis(str + "(", left - 1, right, ans);
}else {
if (left > 0){
generateParenthesis(str + "(", left - 1, right, ans);
}
generateParenthesis(str + ")", left, right - 1, ans);
}
}
}