代码
class Solution {
public:
string countAndSay(int n) {
string str="1";
if(n==1)return str;
while(--n)
{
char value=str[0];
string str2="";
int count=0;
for(int i=0;i<str.length();++i)
{
if(str[i]==value)count++;
else {str2+=to_string(count);str2+=value;
value=str[i];count=1;}
if(str[i]==value&&i==str.length()-1){str2+=to_string(count);str2+=value;}
}
str=str2;
}
return str;
}
};
emm 这道题一开始想复杂了,先先用int型和循环队列写的,就是不利用额外空间,遍历之前的queue,将统计的数字直接放在该队列的末尾,这样弄完之后还要转换为string,本菜鸡实在无法实现,遂放弃。转为直接用string,同时在每次循环中创建新的string,再将其复制给原string,绕开循环队列。
学习到了tostring()的用法,即将数字转为string类型,具体参考这里
然后大佬对这道题都是用递归,下面附上供参考。
* 尾递归 */
char *countHelper(char *s, int n)
{
if (n == 1)
return s;
else
{
//求下一个数
int count;
char ch[10000];
char *p = ch;
//一直读数
while (*s!='\0')
{
count = 1;
//如果一直是同一个数
while (*s==*(s+1))
{
count++;
s++;
}
//下一个数更新
*p++ = (char)(count+'0');
*p++ = *s++;
}
return countHelper(ch, n - 1);
}
}
char *countAndSay(int n)
{
return countHelper("1", n);
}
作者:heator
链接:https://leetcode-cn.com/problems/two-sum/solution/javahe-cwei-di-gui-0ms-by-heator/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
递归这种思想我还没有真正学会,慢慢来吧,道阻且长,吾将上下而求索。