38. Count and Say
The count-and-say sequence is the sequence of integers with the first five terms as following:
1. 1 2. 11 3. 21 4. 1211 5. 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 term of the count-and-say sequence.
Note: Each term of the sequence of integers will be represented as a string.
Example 1:
Input: 1 Output: "1"
Example 2:
Input: 4 Output: "1211"
class Solution {
public:
string countAndSay(int n)
{
if (n == 1)
return "1";
string s = "1";
while (--n)
{
s = Count(s);
}
return s;
}
private:
string Count(string s) //计算下一个序列
{
string ret = "";
int i = -1;
while ( (++i) < s.size())
{
int j = i + 1; //指针往后移动
while (j < s.size() && s[i] == s[j])
{
j++;
}
char temp = (j - i) + '0';
ret = ret + temp + s[i];
if (i + 1 != j) //重定位开始位置i
i = j - 1;
}
return ret;
}
};