题目
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.
---
大概题意是第i+1个字符串是第i个字符串的读法,第一字符串为 “1”;
比如第四个字符串是1211,它的读法是 1个1、1个2,2个1,因此第五个字符串是111221;
第五个字符串的读法是:3个1、2个2、1个1,因此第六个字符串是312211
思路
直接遍历, 找出每个数字出现的次数即可.
code
class Solution {
public:
string countAndSay(int n) {
if(n < 1) return "";
if(n == 1) return "1";
string res = "1";
for(int i = 1; i < n; i++) {
int cnt = 0;
string s = "";
char c = res[0];
int len = res.length();
for(int j = 0; j < len; j++) {
if(c == res[j]) {
cnt++;
} else {
s += (cnt + '0');
s += c;
// reset
cnt = 1;
c = res[j];
}
}
// don't foget the last one
if(cnt != 0) {
s += (cnt + '0');
s += c;
}
res = s;
}
return res;
}
};