Leetcode刷题(38. 报数)
作者:互联网
Leetcode刷题(38. 报数)
一.题目
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
示例:
- 1
- 11
- 21
- 1211
- 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