[Leetcode]ZigZag Conversion

来源:互联网 发布:侠客风云传mod数据 编辑:程序博客网 时间:2024/06/16 00:32

C语言版本:

char* convert(char* s,int numRows){    if(s[1]=='\0'||numRows==1)//特殊情况        return s;    char *ans=(char* )malloc(10000);    int step=2*(numRows-1),len,i,j,m,flag;//step第一行相邻两个元素在s中的位置差    len=strlen(s);    for (i = 0,j=0; i < len; i+=step,j++)//ans开头第一行元素写入        ans[j]=s[i];    for(m=0;m<numRows-2;m++)//ans除去首尾两行中间元素写入,m表示第几行        for(i=m+1,flag=0;i<len;flag=flag?0:1){            ans[j++]=s[i];            if(!flag)//中间行相当有两个等差数列,每次往前推i的位置,距离有所不同                i+=(numRows-m-2)*2;            else                i+=(m+1)*2;        }    for (i = numRows-1; i < len; i+=step,j++)//结尾行的写入        ans[j]=s[i];    ans[j]='\0';    return ans;}
0 0