class Solution {
bool valid(const string& str) {
int balance = 0;
for (char c : str) {
if (c == '(') {
++balance;
} else {
--balance;
}
if (balance < 0) {
return false;
}
}
return balance == 0;
}
void generate_all(string& current, int n, vector& result)
{
if (n == current.size()) {
if (valid(current)) {
result.push_back(current);
}
return;
}
current += '(';
generate_all(current, n, result);
current.pop_back();
current += ')';
generate_all(current, n, result);
current.pop_back();
}
public:
vector generateParenthesis(int n) {
vector result;
string current;
generate_all(current, n * 2, result);
return result;
}
};
这是力扣上原题的官方解答,暴力解法
问:bool valid这段函数中如果”(“的数比“)”多,balance大于零,这括号不就不成对数吗
问:return balance == 0;返回的结果对于bool valid来说是1还是0。
问:void generate_all(string& current, int n, vector& result),这段代码我明白是要生成所有可能的序列,但是我不明白current += '('; current += ')';这样前后顺序的排列,难道生成的不都是一样的序列吗,我觉得没有多样化啊。能讲讲这是怎么实现的吗。
问:generate_all(current, n, result);这么一连串递归套娃,这个函数什么时候停止呢,难道就没有重复的吗,遇到重复的时候他是怎么解决的,而且即使给了个n,但是我仍然找不到能让这个函数停止的语句啊
来一个负责任的大佬,希望能耐心给我解答一下