###########################################################
感觉题目挺难的,借鉴了他人的动态规划算法,勉强能理解,自己稍微写了下
C++数组里包含数组空间复杂度似乎过高,可用深度搜索实现;
参考代码:Yuyu, 负雪明烛
###########################################################
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
if n<=0:
return [];
zj = list()
zj.append([None])
zj.append(["()"])
for i in range(2,n+1):
answ = list()
for k in range(0,i):
list1 = zj[k]
list2 = zj[i-1-k]
for p1 in list1:
for p2 in list2:
if p1 == None:
p1 = ""
if p2 == None:
p2 = ""
el = "(" + p1 + ")" + p2
answ.append(el)
zj.append(answ)
return zj[n]
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> res;
int p = 0, q = 0;
dfs(res, "", n, p, q);
return res;
}
void dfs(vector<string>& res, string path, int n, int p, int q) {
if (q > p || p > n || q > n) return;
if (p == q && p == n) {
res.push_back(path);
return;
}
dfs(res, path + '(', n, p + 1, q);
dfs(res, path + ')', n, p, q + 1);
}
};