leetcode22 括號生成(dfs回溯)
阿新 • • 發佈:2021-10-27
連結:https://leetcode-cn.com/problems/generate-parentheses/
題目
數字 n代表生成括號的對數,請你設計一個函式,用於能夠生成所有可能的並且 有效的 括號組合。
有效括號組合需滿足:左括號必須以正確的順序閉合。
用例
示例 1:
輸入:n = 3
輸出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:
輸入:n = 1
輸出:["()"]
提示:
1 <= n <= 8
思路
因為只有一種型別括號
只要最後生成n個左括號和n個右括號即可
在構造當前序列過程中 當left<n時說明還可以插左括號
當left>right時說明可以插右括號
class Solution { public: vector<string> generateParenthesis(int n) { string cur; backtrak(cur,0,0,n); return ans; } private: vector<string>ans; void backtrak(string cur,int left,int right,int n){ if(cur.size()==n*2){ ans.push_back(cur); return; } if(left<n){ cur.push_back('('); backtrak(cur,left+1,right,n); cur.pop_back(); } if(right<left){//對於每個位置只需要保證左括號大於右括號數量 cur.push_back(')'); backtrak(cur,left,right+1,n); cur.pop_back(); } } };