22. Generate Parentheses

給定正整數,返回這個正整數組成的有效括號組成的數組。

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

  • 時間復雜度 O(\frac{4^n}{\sqrt{n}})
  • 空間復雜度 O(n)
  • 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)
    }
} 
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容