您的位置:首页 > 其它

LeetCode No.38 Count and Say

2016-11-02 19:32 357 查看
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 ;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: