[回溯法]面試題 08.09. 括號(medium)

題目:
在這裏插入圖片描述
題解:

  • 回溯法經典題型
  • 題目中的 n 表示括號的個數,那麼我們用 n 來表示左括號的個數'(',那麼每使用一個左括號,同時產生一個可使用的右括號數')',可以保證不會產生無效括號。
  • 可行解的生成:可使用的左右括號數都爲0時,表示生成一個有效的括號。

代碼如下:

class Solution {
public:
    vector<string> generateParenthesis(int n) {
        vector<string> res;
        backtrack(res,n,0,"");
        return res;
    }
    
    //回溯:left表示可使用的做左括號數'(',right表示可使用的右括號數')'
    void backtrack(vector<string>& res,int left,int right,string track){
        if(!right&&!left)res.push_back(track);
        else{
            /*使用一個左括號,同時可使用右括號數加1,這樣可避免生成無效括號*/
            if(left>0)backtrack(res,left-1,right+1,track+'(');
            /*可使用的右括號數大於0,則用來補齊原來的左括號*/
            if(right>0)backtrack(res,left,right-1,track+')');
        }
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章