1. 程式人生 > >22. Generate Parentheses C++回溯法

22. Generate Parentheses C++回溯法

res col 條件 color 回來 com div parent limit

把左右括號剩余的次數記錄下來,傳入回溯函數。

判斷是否得到結果的條件就是剩余括號數是否都為零。

註意判斷左括號是否剩余時,加上left>0的判斷條件!否則會memory limited error!

判斷右括號時要加上i==1的條件,否則會出現重復的答案。

同樣要註意在回溯回來後ans.pop_back()

class Solution {
public:
    void backTrack(string ans, int left, int right, vector<string>& res)
    {
        if(left==0 && right==0
) { res.push_back(ans); } else { for(int i=0;i<2;i++) { if(i==0 && left>0) { ans.push_back((); backTrack(ans,left-1,right,res); ans.pop_back(); }
else { if(i == 1 && right>left && right>0) { ans.push_back()); backTrack(ans,left,right-1,res);   ans.pop_back(); } } } } } vector
<string> generateParenthesis(int n) { vector<string> res; string ans; backTrack(ans,n,n,res); return res; } };

技術分享圖片

22. Generate Parentheses C++回溯法