斯莫格釋出 1.55× 寬熒幕手機電影鏡頭,售價 499 元
阿新 • • 發佈:2022-04-28
22. 括號生成
數字 n
代表生成括號的對數,請你設計一個函式,用於能夠生成所有可能的並且 有效的 括號組合。
示例 1:
輸入:n = 3
輸出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:
輸入:n = 1
輸出:["()"]
提示:
1 <= n <= 8
思路:
使用回溯演算法,那麼我們先去考慮終止條件,n對括號,就是你輸出的字串一共要有2n個元素,並且這些元素的括號是合法的。那麼如何判斷括號合法呢,明顯可以使用棧,入棧'(',如果遇到')'就出棧,如果棧為空就說明沒有左括號自然就非法。那麼只要在使用一個temp字串記錄一下結果就好。
class Solution { public: vector<string>ans; stack<char>st; string temp=""; vector<string> generateParenthesis(int n) { backtrack(0,2*n); return ans; } void backtrack(int index,int m){ //base case if(index==m){ if(st.empty()){ ans.push_back(temp); return; }else{ return; } } //選擇左括號 st.push('('); temp+='('; backtrack(index+1,m); //撤銷選擇 st.pop(); temp.pop_back(); //應該選擇右括號 但是先判斷能不能加右括號 if(st.empty())return ;//棧為空 st.pop();//有左括號 那就彈出左括號 temp+=')'; backtrack(index+1,m); st.push('('); temp.pop_back(); } };