思路 回溯算法
套用回溯算法模板,写下结束条件和选择条件即可。
class Solution {
private:
string path;
vector<string> allPath;
public:
void bathTrack(string path, int count, int end, int sumR, int sumL) {
if (count < 0) return; //排除掉无效括号组合
if (sumR == end && sumL == end) { //结束条件
allPath.push_back(path);
return ;
}
//选择列表
if (sumR < end) {
path.push_back('(');
bathTrack(path, count + 1, end, sumR + 1, sumL);
path.pop_back();
}
if (sumL < end) {
path.push_back(')');
bathTrack(path, count - 1, end, sumR, sumL + 1);
path.pop_back();
}
}
vector<string> generateParenthesis(int n) {
bathTrack(path, 0, n, 0, 0);
return allPath;
}
};