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=1时输出字符串1;n=2时,数上次字符串中的数值个数,因为上次字符串有1个1,所以输出11;n=3时,由于上次字符是11,有2个1,所以输出21;n=4时,由于上次字符串是21,有1个2和1个1,所以输出1211。依次类推,写个countAndSay(n)函数返回字符串。
http://blog.csdn.net/kenden23/article/details/17081853
https://github.com/krystism/leetcode/tree/master/algorithms/CountandSay
http://www.cnblogs.com/huxiao-tee/p/4109596.html
注意:用n(int)+'0'表示'n',仅当n<10时有效!
class Solution { public: string countAndSay(int n) { if(0==n) return NULL; string result="1"; while(--n){ result=nextSequence(result); } return result; } private: string nextSequence(string s1){ char cur=s1[0]; int count=1; string result; for(int i=1;i<s1.size();i++){ if(cur!=s1[i]){ result+=itos(count); result.push_back(cur); cur=s1[i]; count=1; } else{ count++; } } result+=itos(count); result.push_back(cur); return result; } string itos(int i){ ss.str(""); ss.clear(); ss<<i; return ss.str(); } stringstream ss; };