1. 程式人生 > >Leetcode 22. 括號生成 dfs+回溯

Leetcode 22. 括號生成 dfs+回溯

給出 n 代表生成括號的對數,請你寫出一個函式,使其能夠生成所有可能的並且有效的括號組合。

例如,給出 n =3,生成結果為:

[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]

此題要注意新增)的數目比(的數目小且還有剩餘使才能新增。。。

當全部新增完畢時,return。

程式碼如下:
 

class Solution {
public:
    vector<string> generateParenthesis(int n) {
        vector<string> ve;
        if(n==0)
            return ve;
        dfs ("",n,n,ve);
        return ve;
    }
    void dfs (string s,int x,int y,vector<string>&ve)
    {
        if(x==0&&y==0)
        {
            ve.push_back(s);
            return;
        }
        if(x)
          dfs (s+'(',x-1,y,ve);
        if(y&&y>x)
          dfs (s+')',x,y-1,ve);
    }
};