其他分享
首页 > 其他分享> > Leetcode刷题(38. 报数)

Leetcode刷题(38. 报数)

作者:互联网

Leetcode刷题(38. 报数)

一.题目

报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:

示例:

  1. 1
  2. 11
  3. 21
  4. 1211
  5. 111221

1 被读作 “one 1” (“一个一”) , 即 11。
11 被读作 “two 1s” (“两个一”), 即 21。
21 被读作 “one 2”, “one 1” (“一个二” , “一个一”) , 即 1211。

给定一个正整数 n(1 ≤ n ≤ 30),输出报数序列的第 n 项。

注意:整数顺序将表示为一个字符串。

二.代码(C)

void countnextline(char* p,char* temp);
char * countAndSay(int n)
{
    int i,j;
    int count=0;
    int count2=0;
    //char a[1000]="1";
    char temp[10000];
    char *p = (char*)malloc(10000*sizeof(char));
    strcpy(p,"1");
    for(i=1;i<n;i++)
    {
        //printf("%d\t",n);
        countnextline(p,temp);
    }
    //printf("\t%s",p);
    return p;
}
void countnextline(char* p,char* temp)
{
    int count=1;
    int count2=0;
    int i;
    for(i=0;p[i]!='\0';i++)
    {
        //printf("i=%d,p[i]=%c\n",i,p[i+1]);
        if (i==0)
            count = 1;            
        else if(p[i]==p[i-1])
            count++;
        else
        {
            //printf("%d",count);
            //itoa(count,&temp[count2*2],10);
            temp[count2*2] = count+48;
            temp[count2*2+1] = p[i-1];
            count=1;
            count2++;
        }
    }
    //itoa(count,&temp[count2*2],10);
    temp[count2*2] = count+48;
    temp[count2*2+1] = p[i-1];
    temp[count2*2+2] = '\0';
    //printf("%s",temp);
    strcpy(p,temp); 
}

三.提交记录

在这里插入图片描述
在这里插入图片描述

四.备注

每次迭代计数上一次的结果即可。

标签:11,38,21,int,Leetcode,char,读作,报数,刷题
来源: https://blog.csdn.net/Umbraner/article/details/100655010