leetcode[6]ZigZag Conversion

The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)

P   A   H   N
A P L S I I G
Y   I   R

And then read line by line: "PAHNAPLSIIGYIR"

Write the code that will take a string and make this conversion given a number of rows:

string convert(string text, int nRows);

convert("PAYPALISHIRING", 3) should return "PAHNAPLSIIGYIR".

class Solution {
public:
    string convert(string s, int nRows) 
{
    int n=s.length();
    if (n==0||n==1||nRows==1||n<=nRows)
    {
        return s;
    }
    string temp="";
    int k=(n-1)/(2*nRows-2);
    for (int i=0;i<nRows;i++)
    {
        if ((i==0)||(i==nRows-1))
        {
            temp+=s[i];
            for (int j=1;(j<=k)&&((i+j*(2*nRows-2))<n);j++)
            {
                temp+=s[i+j*(2*nRows-2)];
            }
        }
        else
        {
             temp+=s[i];
            int ntemp=i;
            int klast=(n-1-(nRows-1))/(2*nRows-2);
            int kk=(klast!=k)?(2*k):(2*k+1);
            for (int j=1;((j<=kk)&&(ntemp<n));j++)
            {
                if (j%2)
                {
                    ntemp+=(2*nRows-2*i-2);
                } 
                else
                {
                    ntemp+=2*i;
                }
                if (ntemp<n)
                {
                    temp+=s[ntemp];
                }
                else if(i>=nRows)
                {
                    return temp;
                }
            }
        }
    }
    return temp;
}
};

 

posted @ 2015-02-10 13:54  Vae永Silence  阅读(147)  评论(0编辑  收藏  举报