LC22.括號生成-回溯

題目描述
在這裏插入圖片描述
解題思路
我們可以採用遞歸回溯的思路,用兩個變量分別記錄左括號和有括號使用的次數,然後對於當前的位置i我們可以放置左括號,也可以放置有括號(第一個位置除外)。所以對於每一層遞歸我們就可以把放置左右括號分別繼續遞歸,相應的左右括號使用次數對應的做+1就可以了。最後遞歸的邊界就是答案字符串等於2倍的n

    vector<string> ans;
    int num;
    // 判斷括號是否匹配
    void DFS(string s,int left,int right)
    {
        if(s.size()==num*2)
        {
            ans.push_back(s);
            return;
        }
        string tmp=s;
        // 先放左括號然後再放又闊號
        if(left<num)
            DFS(tmp+='(',left+1,right);
        if(right<left)
            DFS(s+=')',left,right+1);
    }
    vector<string> generateParenthesis(int n) {
        num=n;
        DFS("(",1,0);
        return ans;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章