设为首页 加入收藏

TOP

leetcode 6. ZigZag Conversion
2019-05-12 02:23:31 】 浏览:80
Tags:leetcode ZigZag Conversion
版权声明:转载请联系博主 https://blog.csdn.net/zxtalentwolf/article/details/79008601

原始超时版本

char* convert(char* s, int numRows) {
    if(numRows<=1 || numRows>=strlen(s)) return s;
    
    int slen=strlen(s);
    int rowlen=slen;
    char t[1000*1000];
    //char *t = malloc(sizeof(char) * (numRows * rowlen));
    for(int i=0; i < 1000 * 1000; i++) t[i]=-1;
   // memset(t,1000*1000,-1);
    int row,col,step;
    row=col=step=0;
    for(int i=0; i < strlen(s); i++){
        *(t+rowlen*row+col)=s[i];
        if(row == 0) step=1;
        else if(row == numRows-1) step=-1;
        row+=step;
        if(step == -1) col++;
    }
    char *res=malloc(sizeof(char) * (slen+1));
    int p=0;
    for(int i=0;i < numRows ; i++)
    for(int j=0;j < slen; j++){
        if(t[i*slen+j]!=-1) res[p++]=t[i*slen+j];
    }
   // free(t);
    res[p]='\0';
    return res;
    
}

上面的这个程序因为要初始化数组的原因很容易超时,于是经过研究,使用下面的算法更加优秀

char* convert(char* s, int numRows) {
    if(numRows<=1 || numRows>=strlen(s)) return s;
    int k=0,n=strlen(s);
    char * res=malloc(sizeof(char)*(n+1));
    for(int i=0;i < numRows; i++){
        for(int j=i;j<n;j+=2*(numRows-1)){
            res[k++]=s[j];
            if(i!=0  && i!=numRows-1){
                int t=j+2*(numRows-1)-2*i;
                if(t<n)
                res[k++]=s[t];
            }
        }
        
    }
    res[k]='\0';
    return res;
    
}

这里应当注意strlen求取的是字符串的不含'\0'的字符长度,所以动态分配字符空间时要注意加一
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇RabbitMQ第一步 下一篇css图形

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目