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.
====================================================================================
题目链接:https://leetcode.com/problems/count-and-say/
题目大意:求出第n个序列。其中第一个序列是1,然后每个序列都是前面一个序列的的读法。比如1211读法为:1个1,1个2,2个1,红色部分合起来就是111221。
思路:其实就是模拟,遍历前一个序列,统计字符与其对应的相连个数,合起来就是下一个序列。
注意点:要注意当字符个数sum大于9的时候,就不能直接将sum转成char了,所以要写一个函数将int转成string。
附上代码:
class Solution {
public:
string countAndSay(int n) {
if ( n <= 0 )
return "" ;
string ans = "1" ;
for ( int i = 2 ; i <= n ; i ++ )
{
string s = "" ;
char ch = ans[0] ;
int sum = 1 ;
for ( int j = 1 ; j < ans.size() ; j ++ )
{
if ( ans[j] != ch )
{
s += intToStr ( sum ) ;
s += ch ;
ch = ans[j] ;
sum = 1 ;
}
else
sum ++ ;
}
s += intToStr ( sum ) ;
s += ch ;
ans = s ;
}
return ans ;
}
private :
string intToStr ( int n )
{
string ans = "" ;
while ( n )
{
ans = char ( n % 10 + '0') + ans ;
n /= 10 ;
}
return ans ;
}
};