022 Generate Parentheses[M]

1 题目描述

Given
n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

难度:Medium

2 题目样例

For example, given n = 3, a solution set is:

[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]

3 题意分析

给出一个数字n,要求返回含有n对括号的,所有合法的括号序列。

(这里的合法,大家看看样例就知道是什么意思了……理解就好。)

4 思路分析

嘻嘻,我觉得这个题目比上一个简单欸!!

我们可以利用深度优先搜索的思想,用递归的方法来解决这个问题。

每次左括号多于右括号时,可以加左括号或者右括号。

如果左括号等于右括号,就只能加左括号。

左括号达到数量上限,只能加右括号。右括号同理。

代码实现如下:

class Solution 

{  
    
public: 
    
    void generate(int left, int right, string str, vector<string>& res)  
        
    {  
        if(left == 0 && right == 0)  
            
        {  
            res.push_back(str);  
            
            return;  
        }  
        
        if(left > 0)  
            
        {  
            generate(left - 1, right, str + '(', res);  
        }  
        
        if(right > left)  
            
        {  
            generate(left, right - 1, str + ')', res);  
        }  
    }  
    
    vector<string> generateParenthesis(int n)
    
    {  
        vector<string> res;  
        
        generate(n, n, "", res);  
        
        return res;  
    }  
};  

这道题目所有的提交代码的用时都相当短。我上边的这段代码用时3ms,但却落在了后10%的区间里。我看了看其他区间的代码,基本上也和上边的一个样。至于为什么时间用的比较短嘛…玄学,玄学。

5 后记

外边的烟花声吵得我难以继续写下去了…

我永远爱摸鱼.jpg

    原文作者:Lolita
    原文地址: https://zhuanlan.zhihu.com/p/33835658
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞