一.递归算法
1.汉诺塔
https://www.cnblogs.com/lightmonster/p/10274552.html
https://www.cnblogs.com/wuzhenbo/p/3496054.html
http://c.biancheng.net/view/1556.html
2.括号生成
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
class Solution {
public:
void _generate(int cur, int max, std::string str)
{
if (cur >= max) {
res.push_back(str);
return;
}
_generate(cur + 1, max, str+"("); //没有限制条件的递归
_generate(cur + 1, max, str+")");
}
std::vector<std::string> res;
std::vector<std::string> generateParenthesis(int n) {
_generate(0, 2 * n, "");
return res;
}
};
在上面的基础上增加了对条件的判断,筛选出合法的括号。
class Solution {
public:
void _generate(int left, int right, int max, std::string str)
{
if (left == max && right == max) {
res.push_back(str);
return;
}
if (left < max) _generate(left + 1, right, max, str+"(");
if (right < left && right < max) _generate(left, right + 1, max, str+")"); //right < max可以去掉
}
std::vector<std::string> res;
std::vector<std::string> generateParenthesis(int n) {
_generate(0, 0, n, "");
return res;
}
};