文章目录
第十八天
递归的实现、特性及思维要点
重复性、自相适性
递归-循环 通过函数体进行的循环
向下进入到不同层;向上在一层层回来
括号生成
//暴力法
class Solution {
bool valid(const string& str) {
int balance = 0;
for (char c : str) {
if (c == '(') {
++balance;
} else {
--balance;
}
if (balance < 0) {
return false;
}
}
return balance == 0;
}
void generate_all(string& current, int n, vector<string>& result) {
if (n == current.size()) {
if (valid(current)) {
result.push_back(current);
}
return;
}
current += '(';
generate_all(current, n, result);
current.pop_back();
current += ')';
generate_all(current, n, result);
current.pop_back();
}
public:
vector<string> generateParenthesis(int n) {
vector<string> result;
string current;
generate_all(current, n * 2, result);
return result;
}
};
//递归
class Solution {
void backtrack(vector<string>& ans, string& cur, int open, int close, int n) {
if (cur.size() == n * 2) {
ans.push_back(cur);
return;
}
if (open < n) {
cur.push_back('(');
backtrack(ans, cur, open + 1, close, n);
cur.pop_back();
}
if (close < open) {
cur.push_back(')');
backtrack(ans, cur, open, close + 1, n);
cur.pop_back();
}
}
public:
vector<string> generateParenthesis(int n) {
vector<string> result;
string current;
backtrack(result, current, 0, 0, n);
return result;
}
};
剩余的习题第二天再看,时间太紧了,每天都抽不出俩小时来
等第十周过了就好了,最好是等到六级也过了,哎,以前没想着好好学,现在麻烦死了
做练习就是抄答案,太快了接受不了了,先就这样吧,慢慢跟着先过一遍对大部分东西有个大体的印象,到第二遍再看