问题:count-and-say是一个整数数列,从数字 1 开始,序列中的每一项都是对前一项的描述。
输入:正整数n
输出:count-and-say的第n项
思路:采用递归算法。要生成第n项,首先要写出第n-1项。
class Solution {
public:
string countAndSay(int n) {
string result = "";
if(n==1)
{
result = "1";
return result;
}
else
{
result = countAndSay(n-1);
string new_result;
int len = result.length();
int i = 0;
int j;
do
{
char ele_num = '1';
j = i+1;
while(j<len&&result[i]==result[j])
{
ele_num++;
j++;
}
char ele_value = result[i];
new_result = new_result + ele_num + ele_value;
i=j;
}
while(j<len);
return new_result;
}
}
};
解答:string.push_back()缩短程序运行时间。
class Solution {
public:
string countAndSay(int n) {
if (n == 1){return "1";}
if (n == 2){return "11";}
string result = countAndSay(n-1);
string newresult = "";
int count = 1;
for(int i = 1; i < result.size(); ++i){
if(result[i]!=result[i-1]){
newresult.push_back('0'+count);
newresult.push_back(result[i-1]);
count = 1;
}else{
count++;
}
if(i == result.size()-1){
newresult.push_back('0'+count);
newresult.push_back(result[i]);
}
}
return newresult;
}
};