22. Generate Parentheses

给定正整数,返回这个正整数组成的有效括号组成的数组。

使用回溯法,left和right表示剩余的括号数目,所以left > right 的时候需要退出。

  • 时间复杂度
  • 空间复杂度
  • Runtime: 80 ms, faster than 74.26%
  • Memory Usage: 39.1 MB, less than 56.85%
/**
 * @param {number} n
 * @return {string[]}
 */
var generateParenthesis = function(n) {
    var res = []
    generateParenthesisDFS(res, n, n, '')
    return res
};
var generateParenthesisDFS = function(res, left, right, cur){
    if(left > right) return
    if(left === 0 && right ===0){
        res.push(cur)
    }
    if(left > 0) generateParenthesisDFS(res, left - 1, right, cur + '(')
    if(right > 0) generateParenthesisDFS(res, left, right - 1, cur + ')')
}

另解:

/**
 * @param {number} n
 * @return {string[]}
 */
var generateParenthesis = function(n) {
    var res = []
    backTrack(res, '', 0, 0, n)
    return res
};
var backTrack = function(res, cur, left, right, n){
    if(cur.length === 2*n){
        if(res.indexOf(cur) === -1) res.push(cur)
        return
    }
    if(left < n){
        backTrack(res, cur+'(', left + 1, right, n)
    }
    if(left > right){
        backTrack(res, cur+')', left, right + 1, n)
    }
} 

你可能感兴趣的:(22. Generate Parentheses)