- 921. Minimum Add to Make Parentheses Valid 使括号有效的最少添加
- 915. Partition Array into Disjoint Intervals 分割数组
- 932. Beautiful Array 漂亮数组
- 940. Distinct Subsequences II 不同的子序列 II
本文关键词:括号, 括号生成,题解,leetcode, 力扣,Python, C++, Java
题目地址:https://leetcode.com/problems/generate-parentheses/description/
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
For example, given n = 3, a solution set is:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
给定n,要输出n个左括号和右括号能匹配的所有字符串。
仍然是回溯法的题目,回溯法的题目可以看看这个文章: https://segmentfault.com/a/1190000006121957
判断回溯很简单,拿到一个问题,你感觉如果不穷举一下就没法知道答案,那就可以开始回溯了。
一般回溯的问题有三种:
1、 Findapathtosuccess有没有解;
2、 Findallpathstosuccess求所有解;
在我的理解中,回溯法是一个剪枝了的二叉树。我们要得到的结果是可以good leaf,如果不满足good leaf就继续向下搜索,搜索的时候需要满足一定的条件。
从上面的图片中我们可以很明显的看到,最后五条画黑线的就是最终的结果,其中左分支都是添加左括号,又分支都是添加右括号。
那么我们在什么情况下添加左括号呢?很明显,最多能添加 n 个左括号,在递归调用的时候,在能传递到最底层的共用字符串中先添加 ”(“ ,然后 left-1,递归调用就可以。
那什么时候添加右括号呢?当左括号个数大于右括号的个数时添加右括号。
总之,向下搜索要满足两个条件:
1、 插入数量不超过n;
2、 可以插入)
的前提是(
的数量大于)
;
代码后面的判断条件都是if,而不是elif,因为是满足两个条件的任意一个就可以继续向下搜索,而不是同时只能满足其中的一个。
class Solution(object):
def generateParenthesis(self, n):
"""
:type n: int
:rtype: List[str]
"""
res = []
self.dfs(res, n, n, '')
return res
def dfs(self, res, left, right, path):
if left == 0 and right == 0:
res.append(path)
return
if left > 0:
self.dfs(res, left - 1, right, path + '(')
if left < right:
self.dfs(res, left, right - 1, path + ')')
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
二刷,使用C++,基本结构和上面一样,不过这里lc和rc分别表示左括号的个数和右括号的个数。vector的push_back()方法调用的时候实际上是使用的值传递,也就是会进行赋值到vector里。
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> res;
int lc = 0, rc = 0;
dfs(res, "", n, lc, rc);
return res;
}
void dfs(vector<string>& res, string path, int n, int lc, int rc) {
if (rc > lc || lc > n || rc > n) return;
if (lc == rc && lc == n) {
res.push_back(path);
return;
}
dfs(res, path + '(', n, lc + 1, rc);
dfs(res, path + ')', n, lc, rc + 1);
}
};
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
DDKK.COM 弟弟快看-教程,程序员编程资料站,版权归原作者所有
本文经作者:负雪明烛 授权发布,任何组织或个人未经作者授权不得转发
在 bash 中,() 和 $() 都创建了一个子 shell。 它们之间有什么区别?它们的典型用法是什么? 最佳答案 () 只是创建一个复合命令,运行括号内的命令。 $() 做同样的事情,但也替换了
我有一个关于如何正确解析如下字符串的问题, "(test.function, arr(3,12), "combine,into one")" 进入以下列表, ['test.function', 'ar
假设我有一个非常大的文件,我想检查括号是否平衡。我不能使用堆栈,对吧?因为它会导致堆栈溢出。我可以使用什么方法? 最佳答案 一个简单的计数器。由于您所做的只是计算括号: balance = 0 for
我希望这个线程成为覆盖和调用 toString 的优点/缺点的某种总结。有或没有空括号,因为这件事有时仍然让我感到困惑,即使我已经进入 Scala 很长一段时间了。 那么哪一个比另一个更可取呢?来自
本文关键词:有效,括号,括号匹配,栈,题解,leetcode, 力扣,Python, C++, Java 题目地址:https://leetcode.com/problems/valid-paren
本文关键词:括号, 括号生成,题解,leetcode, 力扣,Python, C++, Java 题目地址:https://leetcode.com/problems/generate-parent
我遇到了几天的问题。 我在编译我的程序时收到此警告。 In member function 'void CClientManager::RESULT_SAFEBOX_LOAD(CPeer*, SQLM
题目地址:https://leetcode.com/problems/best-sightseeing-pair/ 题目描述 Given an array A of positive intege
我想匹配以 ')' 结尾的字符串。我使用模式: "[)]\b" or ".*[)]\b" 它应该匹配字符串: x=main2.addMenu('Edit') 但它不起作用。怎么了? 最佳答案 \b
我正在尝试使用 paredit 在 Light Table 上编辑 Clojure/ClojureScript 文件,但该插件似乎不起作用。当我打开一个括号时,它没有关闭。 但是,插件已安装,如插件列
我在 R 中使用正则表达式。我试图找出字符向量中某些字符串末尾带括号的内容。我能够在括号内的内容存在时找到它,但我无法在没有括号的输入中排除非括号内的内容。 例子: > x gsub("(.*?)(
我需要一个正则表达式,其中允许以任何顺序使用空格、括号和连字符的任何数字。但是有必须最后是“+”(加号)。 最佳答案 您可以使用正则表达式: ^[\d() -]+\+$ 解释: ^ : Start
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: What is the purpose of a self executing function in ja
在 Common Lisp 中,特殊运算符 quote 使得后面跟着未计算的任何内容,例如 (quote a) -> a (quote {}) -> {} 但为什么表单 (quote ()) 给我 n
我有一个程序需要在用户输入括号时进行处理。我尝试过: root.bind("") 但是没用,和一样 root.bind("") 如何将括号事件绑定(bind)到 Tkinter 中?请帮助我 最佳答案
当我看到名称中带有括号的函数时,我正在阅读源代码: extern int LIB_(strcmp) ( const char* s1, const char* s2 ); extern char LI
是否可以改变 Hello, this is Mike (example) 到 Hello, this is Mike 将 JavaScript 与正则表达式一起使用? 最佳答案 "Hello, thi
题目地址:https://leetcode.com/problems/different-ways-to-add-parentheses/description/ 题目描述 Given a str
我在 react 原生项目的 VSCode 中使用 prettier,它删除了混合运算符中的括号或使用括号声明 var 时。如何防止 prettier 这样做 示例 1: const foo = (
我有一个包含一些引文的 R Markdown 文档。我正在使用默认的引文样式,这通常对我很有效。但是我有一些句子位于括号内,在这些句子中,我想在不添加第二组括号的情况下引用作品。也就是说,我想取消引用
我是一名优秀的程序员,十分优秀!