首页 > 代码库 > OJ练习5——T6

OJ练习5——T6

ZigZag Conversion

输入一串字符,(由上到下再由下向上)Z字形循环排列后,逐行打印输出。

例如:输入PAYPALISHIRING 输出PAHNAPLSIIGYIR

【我的代码】

string convert(string s,int nRows){    string::size_type i=0,j=0;    string dst="";    int line=0;    dst+=s[0];    int flag=0;    while(i<s.size()&&line<nRows){        if((nRows-line-2)>=0&&(flag==0||line==0))        {//在上方             j=(nRows-line-2)*2+2;            flag=1;        }        else if((line-1)>=0&&(flag==1||line==nRows-1))        {            j=(line-1)*2+2;            flag=0;        }        else ;                if(i+j<s.size()){            dst+=s[i+j];            i=j;        }        else if((i+j>=s.size())&&(line<nRows-1)){            line++;//新行             i=line;            dst+=s[i];            flag=0;        }            else break;        }    return dst;}

【评价】

十分繁琐…………

还是错的!!运行无能。。。没脸po在博客上%>_<%,忽略我。。。

【优美的别人的代码】

string convert(string s, int nRows) {    string res[nRows];    int i = 0, j, gap = nRows-2;    while(i < s.size()){        for(j = 0; i < s.size() && j < nRows; ++j) res[j] += s[i++];        for(j = gap; i < s.size() && j > 0; --j) res[j] += s[i++];    }    string str = "";    for(i = 0; i < nRows; ++i)        str += res[i];    return str;    }

【评价】

几行就解决了有没有!我是弱智吧?……

OJ练习5——T6