class Solution {
public:
vector<string> ans;
void put(int L, int R, string t){
if(L==0){
while(R--!=0) t+=')';
ans.push_back(t);
}
else{
put(L-1,R,t+'(');
if(L<R)
put(L,R-1,t+')');
}
}
vector<string> generateParenthesis(int n) {
put(n,n,"");
return ans;
}
};
依据深度优先遍历写出来的简单的递归,相当简单,相当粗暴。左括号一列,右括号一列,在左括号剩余数目小于右括号剩余数目时,放左括号或右括号都行;若是剩余数目相等则只能放左括号;不存在左括号剩余数目少于右括号的情况。这道题应该是一道数学问题才对,这样虽然很容易能解出答案,但是也很粗鲁,完全没有理解这道题的数学结构。
官方的答案是什么奇奇怪怪的东西?就没有一种数学模型能描述之吗
括号的操作其实就两种:并列和嵌套。然后就想不出来力(悲
题目要求是8个以下的括号,因此输出的复杂度是固定的,纠结于时间其实没必要,反正只要不重复输出,那时间复杂度固定就那么点,正巧我这个就不会重复输出。