题目:
动态规划啊,没看出来是动态规划.
思路:
- 括号是怎么生成的?
- 括号是开始和结尾是怎么样的?
- 怎么样才算是合法的括号?
括号是由左括号和右括号组成的. 合法的括号一定是由左括号和右括号组成.
他一定是由 ( + 合法的括号 + ) + 合法的括号; 其中两个合法的括号可以为空;
看的是大神的题解【最简单易懂的】动态规划 - 括号生成 - 力扣(LeetCode)
代码是:
【最简单易懂的】动态规划 - 括号生成 - 力扣(LeetCode)
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] = { "()" };
string str="";
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]){
str = '(' + p + ')' + q;
dp[i].emplace_back(str);
}
}
}
return dp[n];
}
};