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;
}
总结
如果遇到后项是根据前一项生成的情况,可以考虑递归。