LeetCode 22. Generate Parentheses
Solution1:我的答案
利用和8皇后相同的方法,递归+回溯。这个套路能解决好多题啊~~~
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> res;
if (n == 0) return res;
string temp = "";
int size = n * 2;
my_generate(res, temp, size);
return res;
}
void my_generate(vector<string>& res, string temp, int n) {
if (temp.size() == n) {
res.push_back(temp);
return;
}
else {
temp.push_back('(');
if (isValid(temp, n))
my_generate(res, temp, n);
temp.pop_back();
temp.push_back(')');
if (isValid(temp, n))
my_generate(res, temp, n);
temp.pop_back();
}
}
bool isValid(string temp, int n) {
int n_left = 0, n_right = 0;
for (int i = 0; i < temp.size(); i++) {
if (temp[i] == '(') n_left++;
else n_right++;
}
if (n_left <= n/2 && n_left >= n_right)
return true;
else
return false;
}
};