LeetCode 22.Generate Parentheses (括号生成)

题目描述:

给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。

例如,给出 = 3,生成结果为:

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

Accepted C++ Solution:
 

简洁的递归解决方案:

使用两个整数来计算要添加的剩余左括号(n) 和右括号(m)。 在每个函数调用中,如果n>0,则添加左括号;如果m>0,则添加右括号。当m和n都为零时,追加结果并终止递归调用。

class Solution {
public:
    vector<string> generateParenthesis(int n) {
        vector<string> res;
        addingpar(res,"",n,0);
        return res;
    }
    
    void addingpar(vector<string> &v, string str, int n, int m) {
        if (n==0 && m==0) {
            v.push_back(str);
            return;
        }
        if (m>0) { addingpar(v,str+")",n,m-1); }
        if (n>0) { addingpar(v,str+"(",n-1,m+1);}
    }
};

猜你喜欢

转载自blog.csdn.net/amoscykl/article/details/82762841
今日推荐