试题请参见: https://oj.leetcode.com/problems/count-and-say/
题目概述
The count-and-say sequence is the sequence of integers beginning as follows:
1, 11, 21, 1211, 111221, ...
1
is read off as "one 1"
or 11
.
11
is read off as "two 1s"
or 21
.
21
is read off as "one 2
, then one 1"
or 1211
.
Given an integer n, generate the nth sequence.
Note: The sequence of integers will be represented as a string.
解题思路
简单的模拟题, 在当前位"向后看", 是否有与当前位相同的连续数字.
如果有, 则计数. 计数完成后, 将下标移动至下一个(不同的)数字.
源代码
class Solution {
public:
std::string countAndSay(int n) {
std::string previous = "1";
for ( int i = 1; i < n; ++ i ) {
std::string current;
size_t step = 1;
for ( size_t j = 0; j < previous.size(); j += step ) {
char currentDigit = previous.at(j);
step = 1;
for ( size_t k = j + 1; k < previous.size() && previous.at(k) == previous.at(j); ++ k ) {
++ step;
}
current += static_cast<char>(step + '0');
current += currentDigit;
}
previous = current;
}
return previous;
}
};