题目:https://oj.leetcode.com/problems/count-and-say/
题意:搞了半天没搞懂题意,是说给一个数量n,然后从1开始去按照这样一个顺序去排列,直到n :
1->1
一个1->11
两个->21
一个2一个1->1211
每次读取上一次的结果,然后用“几个几”这样的方式形成一个新的字符串
这里参照别人的方法,用到了stringstream,头文件sstream,2007年c++新的标准里有的,代替strstream,这里的各种类型与string 互相转化比较方便,有点像cout,cin的格式,声明一个stringstream类型的东西,有点像一小块内存一样,什么东西进去,然后用.str()这个方法,都能转化成string类型,比较方便,当然还有别的方法,以后用时再百度吧
代码:
class Solution {
public:
string string_count(string &s){
stringstream ss;
int count = 0;
char last = s[0];
for(int i =0;i<=s.size();i++){
if(s[i] == last){
count++;
}else{
ss<<count<<last;
count = 1;
last = s[i];
}
}
return ss.str();
}
string countAndSay(int n) {
if(n<=0) return NULL;
string s = "1";
for(int i = 1; i < n ; i++){
s = string_count(s);
}
return s;
}
};