这个系列没啥花头,就是纯 leetcode 题目拆解分析,不求用骚气的一行或者小众取巧解法,而是用清晰的代码和足够简单的思路帮你理清题意。让你在面试中再也不怕算法笔试。
15. 括号生成 (/generate-parentheses)
标签
- 回溯法 DFS
- 递归
- 满二叉树
- 中等
题目
这里不贴题了,leetcode打开就行,题目大意:
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
相关知识
回溯三要素
- 选择
- 约束
- 目标
本题而言
- 选择: 只有2种,左 / 右
- 约束: 左括号多,才能选右,否则不成对(非法)
- 目标: 构建出一个长度为2n,的合法串,当做递归的出口就 ok 了
基本思路
这种排列组合问题基本一套回溯法就成。
- 记录左右括号数量, 当前字符串等于最终长度 2n(n 对有 2n 个 字符)
- 注意只有
左括号数 > 右括号数
时,才能加右括号
写法实现
/**
* @param {number} n
* @return {string[]}
*/
var generateParenthesis = function(n) {
const res = []
let dfs = (leftNum, rightNum, curString) => {
// 递归出口,当前字符串等于最终长度 2n(左右都成对)
if (curString.length === 2 * n) {
res.push(curString)
return
}
if (leftNum < n) {
dfs(leftNum + 1, rightNum, curString + '(')
}
if (leftNum > rightNum) {
dfs(leftNum, rightNum + 1, curString + ')')
}
}
dfs(0, 0, "")
return res
};
年初六就来一题吧。
今天就到这儿,想跟我一起刷题的小伙伴可以加我微信哦
搜索我的微信号infinity_9368
,可以聊天说地
加我暗号 "天王盖地虎" 下一句的英文
,验证消息请发给我
presious tower shock the reiver monster
,我看到就通过,暗号对不上不加哈