leetcode解题报告22. Generate Parentheses

来源:互联网 发布:万德数据 编辑:程序博客网 时间:2024/06/17 12:19

leetcode解题报告22. Generate Parentheses

题目地址

难度是medium

题目描述

给定一个整数n,代表左括号的个数,要求返回左括号数为n的所有合法的括号组合字符串。

我的思路

题目直观来看比较简单,我们可以方便地利用stack的后进先出来判断合法的括号字符串,生成一个合法的括号字符串也比较简单。但是难点在于要遍历生成
所有合法的括号字符串,并返回。其实可以发现生成一个合法的括号字符串,每一步在于选择是进栈还是出栈,每一个不同的选择都会导致不同括号字符串生成。这样我们可以采取递归的方式,一次生成过程包括所有可能性,从而得到所有合法的括号字符串。

我的代码

class Solution {public:    vector<string> generateParenthesis(int n) {        string s;        vector<string> result;        func(result, n, 0, s);        return result;    }    void func(vector<string>& result, int remain, int stack, string s) {        if (stack > 0) {            func(result, remain, stack-1, s+')');        }        if (remain > 0) {            func(result, remain-1, stack+1, s+'(');        }        if (stack == 0 && remain==0) {            result.push_back(s);           }    }};

阅读官方题解

没有官方题解。

思想核心总结

对用循环不太好解决的问题,可以考虑试一下递归的方法。