ZigZag Conversion

来源:互联网 发布:网络黑白 花无涯下载 编辑:程序博客网 时间:2024/04/30 05:34

第一种办法,简单粗暴的排着算,要求几行就设几个vector,然后就按照规则行数先加后减,依次加到vector里:

class Solution {public:    string convert(string s, int numRows) {        vector<char> a[numRows];        string str;        int n=s.size();        int l=0;        int flag;        for(int i=0;i<n;i++)        {            if(l==0)            {                flag=0;            }            if(l==numRows-1)            {                flag=1;            }                       a[l].push_back(s[i]);             if(flag==0&&l+1<numRows)            {                l+=1;            }            if(flag==1&&l-1>=0)            {                l-=1;            }        }        for(int j=0;j<numRows;j++)        {            int n1=a[j].size();            for(int k=0;k<n1;k++)            {                str+=a[j][k];            }        }               return str;    }};

第二种,算一下,具体每行的每个位置的坐标情况,形状像正弦曲线,第一行最后一行间距是均匀的8(4*(5-1)),第二行是6(8-2*1),2(2*1),第三行是4(8-2*2),4(2*2),按照这个规律编码即可。

0               8                                                         16

1           7       9                                         15

2       6               10                         14

3   5                           11          13

4                                        12

class Solution {public:    string convert(string s, int numRows) {        string re;        int n=s.size();        if(numRows==1||n==1)        {            re=s;        }        else        {            for(int i=0;i<numRows;i++)            {                int b=i;                if(i==0||i==(numRows-1))                {                    while(b<n)                    {                        re+=s[b];                        b+=2*(numRows-1);                    }                }                else                {                    int b2=i+2*(numRows-1-i);                    while(b<n)                    {                        re+=s[b];                        if(b2<n)                        {                            re+=s[b2];                        }                                                                        b+=2*(numRows-1);                        b2=b+2*(numRows-1-i);                    }                }            }        }        return re;    }};

而且这个会快一些......

0 0
原创粉丝点击