Leetcode题目: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.
题目解答:从这个题目中可以很简单的看出,第n个序列得到的字符串与第(n-1)个字符串之间的关系密不可分。为了得到第n个序列,需要从第一个开始向后依次迭代至n。另外需要做的一件事情,就是统计相同的字符出现了几次,为此,设置一个临时变量count。
代码如下:
class Solution {
public:
string countAndSay(int n) {
string res = "1";
if(n <= 0)
return "";
else
{
convertToString(res,n);
return res;
}
}
void convertToString(string &res, int n)
{
for(int i = 1;i < n;i++)
{
stringstream res_tmp;
res_tmp.clear();
int len = res.length();
char last = res[0];
int j = 1;
int count = 1;
while(true)
{
while((j < len) && (res[j] == last))
{
count++;
j++;
}
res_tmp << count;
res_tmp << last;
if(j < len)
last = res[j];
else
break;
count = 0;
}
res = res_tmp.str();
}
}
};
注意初始时将count置为1,后续设置其值时,设置它为0。