码迷,mamicode.com
首页 > 其他好文 > 详细

22. Generate Parentheses

时间:2021-01-05 11:32:45      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:void   color   代码   ring   parent   vector   public   output   退出   

问题:

给定一个计量括号数量的数字n,求所有的括号组合可能序列。

Example 1:
Input: n = 3
Output: ["((()))","(()())","(())()","()(())","()()()"]

Example 2:
Input: n = 1
Output: ["()"]
 
Constraints:
1 <= n <= 8

  

解法:Backtracking(回溯算法)

参数:

  • path:到目前为止构成的括号序列。
  • optionlists:当前所剩下的左括号数量。(本次是否还能选择左括号)

处理:

  • 退出条件:if(optionlists的剩下左括号数量==0) 则将剩下的右括号追加到path,将path加入res,return
  • for所有可选项:追加左括号or追加右括号(若右括号剩余<=左括号,不满足括号性质:先‘(‘,后‘)‘必须成对出现)
    • 做选择:path+=‘(‘ or path+=‘)‘
    • 递归:
      • 选左括号时:backtracking(path, optionlists-1<左括号数量-1>, optend<右括号数量不变>) or
      • 选右括号时:backtracking(path, optionlists<左括号数量不变>, optend-1<右括号数量-1>) 
    • 撤销选择:path.pop_back()

代码参考:

 1 class Solution {
 2 public:
 3     vector<string> generateParenthesis(int n) {
 4         vector<string> res;
 5         backtracking(res, "", n, n);
 6         return res;
 7     }
 8     void backtracking(vector<string>& res, string path, int optionlist, int optend) {
 9         if(optionlist == 0) {
10             while(optend){
11                 path+=);
12                 optend--;
13             }
14             res.push_back(path);
15             return;
16         }
17         backtracking(res, path+(, optionlist-1, optend);
18         if(optend <= optionlist) return;//‘(‘ must before ‘)‘
19         backtracking(res, path+), optionlist, optend-1);
20         return;
21     }
22 };

 

22. Generate Parentheses

标签:void   color   代码   ring   parent   vector   public   output   退出   

原文地址:https://www.cnblogs.com/habibah-chang/p/14222511.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!