pwstrick / daily

一份搜集的前端面试题目清单、面试相关以及各类学习的资料(不局限于前端)
2.35k stars 243 forks source link

括号生成 #1060

Open pwstrick opened 4 years ago

pwstrick commented 4 years ago

22. 括号生成

/**
 * @param {number} n
 * @return {string[]}
 */
let results;
var generateParenthesis = function(n) {
    results = [];
    let route = [];
    n *= 2;
    backtrack(route, 0, n);
    return results;
};

function backtrack(route, pos, n) {
    if(pos == n) {
        valid(route) && results.push(route.join(""));
        return;
    }
    route[pos] = "(";               //选择
    backtrack(route, pos+1, n);
    route[pos] = ")";               //撤销
    backtrack(route, pos+1, n);
}
//验证当前括号配对是否合法
function valid(route) {
    let balance = 0;
    for(let p of route) {
        if(p == "(")
            balance++;
        else if(p == ")")
            balance--;
        if(balance < 0)
            return false;
    }
    return balance == 0;
}