题目源自于leetcode。
题目: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.
思路:没有发现什么数学规律。逐步递推吧。成为一道字符串问题了。
注意:将int数字转换为string字符串,可以用itoa(),注意其有三个参数。也可以用sprintf(),它至少也是三个参数。更要注意的是,这两个函数都需要有一个buffer空间来保存字符串返回值,需要提前申请空间,而不能只申请一个字符串指针。
代码:
class Solution {
public:
string countAndSay(int n) {
string last, cur;
last = "1";
for(int i=2;i<=n; i++)
{
cur = count(last);
last = cur;
}
return last;
}
string count(const string &input)
{
int n = input.length();
char tmp[10];
string out = "";
int i=0;
int count=1;
char c = input[i];
i++;
while(i<n)
{
if(c == input[i])
{
i++;
count++;
}
else
{
sprintf(tmp,"%d",count);
out += tmp;
out += c;
count = 1;
c = input[i];
i++;
}
}
//别忘了最后的一次查数
sprintf(tmp,"%d",count);
out += tmp;
out += c;
return out;
}
};