22.生成括號
阿新 • • 發佈:2019-01-01
組括號,括號字串長度為
,字串中的每個字元有兩種選擇可能,“(”
或“)”
,故有
種可能。
分析[1]:我們定義兩個變數left和right
分別表示剩餘左右括號的個數
,如果在某次遞迴時,左括號的個數大於右括號的個數,說明此時生成的字串中右括號的個數大於左括號的個數
,即會出現'())'
或者‘)(’
這樣的非法
串,所以這種情況直接返回,不繼續處理。如果left和right都為0
left大於0
,則呼叫遞迴函式,注意引數的更新,若right大於0
,則呼叫遞迴函式,同樣要更新引數。c++ code DFS:
class Solution {
public:
void Generaterecurse(int Restleft, int Restright, string str, vector<string>&res)
{
if (Restleft >Restright)return;//會出現())
if (Restleft == 0 && Restright == 0)
res.push_back(str);
if (Restleft > 0)Generaterecurse(Restleft - 1, Restright, str + '(', res);
if(Restright>0)Generaterecurse(Restleft, Restright-1, str + ')', res);
}
vector<string> generateParenthesis(int n) {
vector<string>res;
Generaterecurse(n, n, "",res);
return res;
}
};