Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
For example, given n = 3, a solution set is:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
思路:回溯算法扑浸,在當前局面下,你有若干種選擇坏为。那么嘗試每一種選擇。如果已經發(fā)現某種選擇肯定不行(因為違反了某些限定條件)坞淮,就返回残炮;如果某種選擇試到最后發(fā)現是正確解,就將其加入解集揍愁。其中需要明確三點:選擇 (Options),限制 (Restraints)杀饵,結束條件 (Termination)莽囤。
對于這道題來說,總共有以下的考慮
1.選擇:
左括號切距。
右括號朽缎。
2.限制:
如果左括號已經用完了,則不能再加左括號了谜悟。
如果已經出現的右括號和左括號一樣多话肖,則不能再加右括號了。因為那樣的話新加入的右括號一定無法匹配葡幸。
3.結束條件:
左右括號都已經用完最筒。
代碼:
/**
* @param {number} n
* @return {string[]}
*/
var generateParenthesis = function(n) {
var res = [];
backtrack('', n, n, res);
function backtrack(tempList, left, right, res){
if(left===0 && right===0){
res.push(tempList);
return;
}
if(left>right) return;
if(left>0){
backtrack(tempList+"(", left-1, right, res);
}
if(right>0){
backtrack(tempList+")", left, right-1, res);
}
}
return res;
};