题记:
今天在知乎看到一句话,所谓的算法最终一切都归于——数学之美,显然目前我还没到这个水平,还仅仅是畅游在算法的海洋中发现一个个“新大陆”,未触及的知识还有很多;虽说学算法学的是它的思想,但就这个思想是最不好让人把握的,一旦一个题目把握了它的解题思路,立马醍醐灌顶,豁然开朗;就在之前的字节跳动笔试题中就有递归的身影,巧妙且精简,让人回味无穷;
今天就简单回味下递归的解题思路;
例子1:
题目描述:给你一个字符串,判断是否是回文字符串,例如:“23455432”,或者”Hello,olleH”等形式;
分析:
本题是典型的可以通过递归来解决的,用两个索引,一个指向开头,一个指向结尾,不断地判断开头和结尾的字符是否一样,如果不一样则返回false,同时必须也有一个终止条件,就是结尾的索引是否是大于开头的;
代码如下:
class Solution {
public:
bool Recursive(string& str) {
if (str.size() == 0) return false;
int start = 0, end = str.size() - 1;
if (end > start) {
if (str[start] != str[end])
return false;
else
return Recursive(str.substr(start + 1, end - 1));
}
return true;
}
};
先开,不断更新;