题目: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。