LeetCode 38. Count and Say
原题链接
简单
作者:
YC.
,
2021-03-02 15:16:39
,
所有人可见
,
阅读 438
class Solution {
public:
string countAndSay(int n) {
// 6、结束条件
if (n == 1) {
return "1";
}
// 1、第n项是由第n-1项推导出来的。第n-1项求得的结果为countAndSay(n-1),那么不妨用递归假设第n-1项算了出来
string previous = countAndSay(n - 1);
// cout<<previous<<endl;
// 2、当前第n-1项结果已知,需要推导第n项的结果
string current = ""; // 用于存储第n 项的结果
// 3、推到规则:记录连续相同整数的个数,添加到结果字符串中
int i = 0;
int j = i;
int count = 0;
while (j <= previous.length()) {
// cout<<previous<<endl;
if (previous[i] == previous[j]) {
// 4、此时发现,需要一个标志记录个数
count++;
j++;
} else {
// 5、不相等说明当前字符统计完毕,存储到结果字符串中
current += to_string(count) + previous[i];
count = 0;
i = j; // 注意此处j不需要加1,因为当前j位置的数字与i位置是不相等的
}
}
return current;
};
};
note:统计连续相同字符的方法
int j = i;
while (j <= s.size()) {
if (s[i] == s[j]) {
....
j++;
} else {
...
i = j;
}
}