Generate Parentheses 括號生成
阿新 • • 發佈:2019-02-19
給出 n 代表生成括號的對數,請你寫出一個函式,使其能夠生成所有可能的並且有效的括號組合。
例如,給出 n =3,生成結果為:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
思路:採用回溯的方法,每次把當前已經加入左括號的個數left和右括號的個數right計入函式引數中,如果left等於n並且right等於n,就把當前的字串curStr加入結果res中。否則如果當前左括號的個數left小於n,就遞迴呼叫自身,並傳入當前字串curStr+'(',如果當前右括號數right小於左括號數left,就遞迴呼叫自身,傳入當前字串為curStr+')'
參考程式碼:
class Solution { public: void generateParenthesisCore(int left, int right, vector<string> &res, string &curStr,int length) { if (left == length && right == length) { res.push_back(curStr); return; } if (left < length) { curStr.push_back('('); generateParenthesisCore(left + 1, right, res, curStr, length); curStr.pop_back(); } if (right < left) { curStr.push_back(')'); generateParenthesisCore(left, right+1, res, curStr, length); curStr.pop_back(); } } vector<string> generateParenthesis(int n) { vector<string> res; string curStr = ""; generateParenthesisCore(0, 0, res, curStr,n); return res; } };