Leetcode第38题笔记

本文详细介绍了计数并说(Count and Say)问题的两种解决方案:使用字符串迭代法和递归法。通过示例代码讲解了如何利用C++实现这一经典序列问题。

代码

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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

递归这种思想我还没有真正学会,慢慢来吧,道阻且长,吾将上下而求索。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值