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.
这道题是迭代生成数字字符串,题目难度为Easy。
题目比较简单,主要在于字符串的处理上,这里用to_string函数将计数转化为字符串,还可以用sprintf或stringstream,其他应该没什么难度了。具体代码:
class Solution {
public:
string countAndSay(int n) {
if(n <= 0) return "";
if(n == 1) return "1";
string curStr = "1", newStr = "";
for(int i=0; i<n-1; ++i) {
int cnt = 1;
for(int j=1; j<curStr.size(); ++j) {
if(curStr[j] == curStr[j-1]) cnt++;
else {
newStr += to_string(cnt);
newStr += curStr[j-1];
cnt = 1;
}
}
newStr += to_string(cnt);
newStr += curStr[curStr.size()-1];
curStr = newStr;
newStr = "";
}
return curStr;
}
};