38.外观数列
问题描述
「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。
第一反应就是递归,但是递归超时(是因为递归了太多次了,如果开始就重设置一个string接收递归结果时间就不超了)
string countAndSay(int n)
{
string result = "";
if (n == 1)
return "1";
int count = 1;
for (int i = 0; i < countAndSay(n - 1).size(); i++)
{
if (countAndSay(n - 1)[i] == countAndSay(n - 1)[i + 1])
{
count++;
continue;
}
else
{
result += to_string(count) + countAndSay(n - 1)[i];
count = 1;
}
}
return result;
}
用循环
string countAndSay1(int n)
{
string result = "";
result = "1";
for (int i = 1; i < n; i++)
{
string tmp = "";
for (int j = 0; j < result.size(); j++)
{
int count = 1;
while (j + 1 < result.size() && result[j + 1] == result[j])
{
count++;
j++;
}
tmp += to_string(count) + result[j];
}
result = tmp;
}
return result;
}