dp做法:
包含n个括号组的字符串结果,取决于n-1个括号组的字符串结果
假设n-1个括号组的字符串形式有k种
则有:n个括号组的字符串 = “(” + p个括号组结果 + “)” + q个括号组结果
其中p + q = n-1
将p个括号组结果从 0 -> n-1遍历一遍,就会得到所有可能的n个括号组的字符串组合
n=0:返回空
n=1:返回"()"
class Solution {
public:
vector<string> generateParenthesis(int n) {
if (n==0) return {};
if (n==1) return {"()"};
std::vector<vector<string>> vec(n+1);
vec[0] = {""};
vec[1] = {"()"};
for(int i=2; i<=n; i++){ // 从2开始计算可能的括号字符串,一直到n
for(int j=0; j<i; j++){
for(string p : vec[j]){
for(string q : vec[i-j-1]){
string temp = "(" + p + ")" + q;
vec[i].push_back(temp);
}
}
}
}
return vec[n];
}
};