题目描述:其实刚看到题目没看懂是什么意思,后来看懂了。
输入n=1 默认1
输入n=2 前面的数据是一个1,记作11
输入n=3 前面的数据是两个1,记作21
输入n=4 前面的数据是一个2一个1,记作1211
输入n=5 前面的数据时一个1一个2两个1,记作111221
……
前面的数据如果连着就练着数,如11就是连着记作21,相邻字母不同如21记作1211
在写程序的过程中,我曾经试图将最后一位的写入放在for循环中,总是显示有错误,后来转换思路,在for循环中只用来计算除了最后一个元素以外的部分,最后一个元素单独处理,一次过!
class Solution {
public:
string countAndSay(int n) {
if(n<=0) return NULL;
string result = "1";
if(n==1) return result;
for(int i=1; i<n; i++)
{
string final;
int num = 1;
char tmp = result[0];
for(int j=1; j<result.size(); j++)
{
if(result[j]==tmp)
num++;
else
{
char change;
sprintf(&change,"%d",num);
final += change;
final += tmp;
tmp = result[j]; num=1;
}
}
char change;
sprintf(&change,"%d",num);
final += change;
final += tmp;
result = final;
}
return result;
}
};