String:38. Count and Say
程序员文章站
2022-07-15 12:28:50
...
我的乱糟糟的代码:
class Solution {
public:
string countAndSay(int n) {
string result = "1";
for(int i = 1; i < n; ++i)
{
result = count(result);
//cout << result << endl;
}
return result;
}
string count(string s)
{
char x = s[0];
int count = 1;
string result = "";
int i = 1;
for(; i < s.size(); ++i)
{
if(s[i] == x)
{
count++;
}
else
{
x = s[i];
result += '0' + count;
result += s[i - 1];
count = 1;
}
}
result += '0' + count;
result += s[i - 1];
return result;
}
};
稍微改一下下,string里可以访问s.size()的位置,所以不用这么麻烦。
class Solution {
public:
string countAndSay(int n) {
string result = "1";
for(int i = 1; i < n; ++i)
{
result = count(result);
//cout << result << endl;
}
return result;
}
string count(string s)
{
char x = s[0];
int count = 1;
string result = "";
for(int i = 0; i < s.size(); ++i)
{
if(s[i + 1] == s[i])
{
count++;
}
else
{
result += '0' + count;
result += s[i];
count = 1;
}
}
return result;
}
};
更简单的写法:
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() + 1; ++i){
if(result[i] != result[i-1]){
newresult.push_back('0'+count);
newresult.push_back(result[i-1]);
count = 1;
}else{
count++;
}
}
return newresult;
}
};