Leetcode 38.外观数列
思路
因为每一行都是根据其上面的一行而生成的,所以会用到递归:for循环遍历上面一行,如果当前字符与后一字符不同,则将该字符的数量和字符放入字符串中(此时要注意重置计数器),如果当前字符与后一字符相同,那么计数器加一。
代码
string countAndSay(int n) {
string res;
if (n == 1) {
res = "1";
}
else {
string s = countAndSay(n - 1);
int count = 1;
for (int i = 0; i < s.size(); i++) {
if (s[i] != s[i + 1]||i==(s.size()-1)) {
res+=to_string(count)+s[i];
count = 1; //重置count
}
else {
count++; //如果与后面字符相同,则计数器加一
}
}
}
return res;
}
总结
如果遇到后项是根据前一项生成的情况,可以考虑递归。
本文深入解析了LeetCode上的经典题目“外观数列”(LeetCode38)的解决思路,通过递归算法实现数列的生成。文章详细介绍了如何使用for循环遍历上一行数列,当遇到不同字符时,记录数量并转换为字符串,最终形成新的数列。

414

被折叠的 条评论
为什么被折叠?



