Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit b09efc4

Browse files
add LeetCode 22. 括号生成
1 parent 8311340 commit b09efc4

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL2Nob2NvbGF0ZTE5OTkvY2RuL2ltZy8yMDIwMDgyODE0NTUyMS5qcGc?x-oss-process=image/format,png)
2+
>仰望星空的人,不应该被嘲笑
3+
4+
## 题目描述
5+
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
6+
7+
8+
9+
示例:
10+
11+
```javascript
12+
输入:n = 3
13+
输出:[
14+
"((()))",
15+
"(()())",
16+
"(())()",
17+
"()(())",
18+
"()()()"
19+
]
20+
```
21+
22+
来源:力扣(LeetCode)
23+
链接:https://leetcode-cn.com/problems/generate-parentheses
24+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
25+
26+
27+
28+
29+
## 解题思路
30+
31+
这道题,看了大佬的题解,发现真是有意思,现在来解释一下。
32+
33+
我们可以直接走可行的情况,对于不可行的情况,自然就剪掉了。
34+
35+
关键在于左右括号如何选择,首先,对于左括号,起初我们必然是要选的,然后我们也可以全部选完,因此,只要有左括号我们必须选,而对于右括号而言,它的剩余数量必须大于剩余左括号数量,我们才能选右括号。
36+
37+
举个反例,假如我们现在已经有了 `(())`,`n = 3`,然后左右括号都还剩一个,如果理解选 `)`,岂不是就 `(()))`了,显示不是有效的括号,应该被剪掉才是,因此,我们必须严格右括号剩余数量必须大于剩余左括号数量,我们才能选右括号。
38+
![](https://img-blog.csdnimg.cn/20200924154433537.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjQyOTcxOA==,size_16,color_FFFFFF,t_70#pic_center)
39+
参考 <a href="https://leetcode-cn.com/problems/generate-parentheses/solution/shou-hua-tu-jie-gua-hao-sheng-cheng-hui-su-suan-fa/">笨猪爆破组</a> 大佬图解
40+
41+
```javascript
42+
var generateParenthesis = function (n) {
43+
let res = [];
44+
let dfs = (cur, left, right) => {
45+
if (cur.length === 2 * n) {
46+
res.push(cur);
47+
return;
48+
}
49+
// 左括号还存在,就可以选左括号
50+
if (left > 0) dfs(cur + '(', left - 1, right);
51+
// 右括号数量要大于左括号,才可以选右括号
52+
if (right > left) dfs(cur + ')', left, right - 1);
53+
}
54+
dfs('', n, n);
55+
return res;
56+
};
57+
```
58+
59+
## 最后
60+
文章产出不易,还望各位小伙伴们支持一波!
61+
62+
往期精选:
63+
64+
<a href="https://github.com/Chocolate1999/Front-end-learning-to-organize-notes">小狮子前端の笔记仓库</a>
65+
66+
<a href="https://github.com/Chocolate1999/leetcode-javascript">leetcode-javascript:LeetCode 力扣的 JavaScript 解题仓库,前端刷题路线(思维导图)</a>
67+
68+
小伙伴们可以在Issues中提交自己的解题代码,🤝 欢迎Contributing,可打卡刷题,Give a ⭐️ if this project helped you!
69+
70+
71+
<a href="https://yangchaoyi.vip/">访问超逸の博客</a>,方便小伙伴阅读玩耍~
72+
73+
![](https://img-blog.csdnimg.cn/2020090211491121.png#pic_center)
74+
75+
```javascript
76+
学如逆水行舟,不进则退
77+
```
78+
79+

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /