题目描述
对第 n个序列,其为第 n-1序列的个数式。
个数式: 112 => 2112,111 => 31。
题目分析
不断迭代计算个数式。
代码
#include <iostream>
class Solution {
public:
std::string countAndSay(int n) {
std::string a = "1";
while (--n) {
a = say(a);
}
return a;
}
std::string say(std::string a) {
int sum = 1;
std::string result = "";
for (unsigned i = 1; i <= a.length(); ++i) {
if (i == a.length() || a[i] != a[i-1]) {
result += intToStdString(sum);
result += charToStdString(a[i-1]);
sum = 1;
} else {
++sum;
}
}
return result;
}
std::string intToStdString(int sum) {
std::string result = "";
while (sum > 0) {
result += charToStdString(sum % 10 + '0');
sum /= 10;
}
for (unsigned i = 0; i < result.length()/2; ++i) {
char tmp = result[i];
result[i] = result[result.length()-i-1];
result[result.length()-i-1] = tmp;
}
return result;
}
std::string charToStdString(char c) {
char p[2];
p[0] = c;
p[1] = '
近期评论