LeetCode 38 . 报数(C语言)

题目描述

第一项存入一个字符‘1’,那么你就从第二项开始描述前一项的字符,例如:第一项‘1’,那么第二项就为‘11’表示‘1个1’,第三项为‘21’表示‘2个1’
题目链接
解题思路:那么我们就可以统计相同数字出现的次数,比如前一项有这样一串字符‘1113334’,那么我们就可以统计 1 出现的次数为 3 ,3 出现的次数 3 ,4 出现的次数 1 ,所以下一项就为‘3 1 3 3 1 4’,大概就是每一个字符出现的次数 + 字符
代码如下

char* countAndSay(int n) {
    char * str = (char *)malloc(sizeof(char) * 1000000);
    char tempChar[1000000];
    str[0] = '1';
    int k = 0;
    for(int i = 1;i < n;i++)
    {
        for(int j = 0,count = 1;j < strlen(str);j++, count = 1)
        {
            while(str[j] == str[j+1])		//统计字符出现次数
            {
                count++;
                j++;
            }
            tempChar[k++] = count + '0';	//分别将字符次数和字符存入一个临时字符数组
            tempChar[k++] = str[j];			
        }
        tempChar[k] = '\0';					//记得在最后加上结尾符
        strcpy(str, tempChar);
        k = 0;	//重置临时字符数组下标
    }
    return str;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值