这道题要生成所有合法的括号情况,可以看到n的数值范围在[1,8]非常小,所以可以一个一个的搜索。
第一种是用DFS把每种情况都搜索一波,留下合法的所有情况
var generateParenthesis = function(n) {
// DFS回溯思路
// 每次添加一个括号,左边和右边,其实这个题目的难点就在于建模
let res = []
dfs(0,0,"")
return res
function dfs(open,close,cur){
// 特判不满足条件的
if( open > n || close > n || close > open ){
return
}
if(open === n && close === n){
res.push(cur)
return
}
// 用左和右来区分其实就相当于push--pop
curLeft = cur + '('
dfs(open+1,close,curLeft)
curRight = cur + ')'
dfs(open,close+1,curRight)
}
};
第二种是用BFS进行搜索,然后用Set的数据结构来去重
var generateParenthesis = function(n) {
// 思路是从开始往后面不断的去推导
let set = new Se