LeetCode 22. 括号生成
问题描述:给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合
class Solution { public: //括号匹配检查 bool testFS(string& sign) { int temp = 0; int i; for (i = 0; i < sign.size(); i++) { if (sign[i] == '(') { ++temp; } else { if (temp == 0) break; else { --temp; } } } if (i == sign.size() && temp == 0) return true; else return false; } void add(string sign, int layer, const int& n, vector<string>& res, int left = 1 , int right = 0) { if (layer == 2*n && testFS(sign)) res.push_back(sign); else { if (left < n) { add(sign + "(", 1 + layer, n, res, 1 + left, right); } if (right < n) { add(sign + ")", 1 + layer, n, res, left, right + 1); } } } vector<string> generateParenthesis(int n) { vector<string> res; if (n == 0) return res; add(string(1, '('), 1, n, res); return res; } };