题目如下:
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.
分析如下:
字符串操作类型的题目,两个指针,去计算相同的一组数有多少个。比如11112222, 开始i = 0, j = 0, 然后j++移动到2, 那么i~j之间的距离就是1111的长度。
我的代码:
//24ms
class Solution {
public:
string countAndSay(string& input) {
int i = 0;
int j = 0;
string result = "";
int count = 0;
char array[20];
while (i < input.size() && j < input.size()) {
while (j<input.size() && input[j] == input[i])
j++;
count = j - i;
sprintf(array, "%d", count);
result = result + string(array) + input.substr(i, 1);
i = j;
}
return result;
}
string countAndSay(int n) {
string result = "1";
for (int i = 1; i < n; ++i) {
result = countAndSay(result);
// std::cout <<"A: result = "<< result<<std::endl;
}
return result;
}
};