//这里采用dfs算法 class Solution { public: vector<string> generateParenthesis(int n) { vector<string> res; func(res, "", 0, 0, n); return res; } void func(vector<string> &res, string str, int l, int r, int n){ if(l > n || r > n || r > l) return ; if(l == n && r == n) {res.push_back(str); return;} func(res, str + '(', l+1, r, n); func(res, str + ')', l, r+1, n); return; } };
//利用动态规划相关知识 dp[i]中的str等于dp[j]与dp[i - j - 1]中str的组合(A)B型。其中j < i class Solution { public: vector<string> generateParenthesis(int n) { if (n == 0) return {}; if (n == 1) return { "()" }; vector<vector<string>> dp(n+1); dp[0] = { "" }; dp[1] = { "()" }; for (int i = 2; i <= n; i++) { for (int j = 0; j <i; j++) { for (string p : dp[j]) for (string q : dp[i - j - 1]) { string str = "(" + p + ")" + q; dp[i].push_back(str); } } } return dp[n]; } };