首页 > 代码库 > ZigZag Conversion

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".

答案

public class Solution {
    public String convert(String s, int nRows) {
        if(s==null||s.length()<=1||nRows==1)
        {
            return s;
        }
        StringBuilder result=new StringBuilder(s.length());
        int LEN=2*nRows-2;
        int times=s.length()/LEN+1;
        for(int row=0;row<nRows;row++)
        {
            int p1=row;
            int p2=row==nRows-1?LEN+row:LEN-row;
            if(p1<s.length())
            {
                 result.append(s.charAt(p1));
            }
            if(p2<s.length())
            {
                 result.append(s.charAt(p2));
            }
            for(int i=0;i<times;i++)
            {
                p1+=LEN;
                if(p1!=p2&&p1<s.length())
                {
                    result.append(s.charAt(p1));
                }
                p2+=LEN;
                if(p2<s.length())
                {
                    result.append(s.charAt(p2));
                }
            }
        }
        return result.toString();
    }
}


ZigZag Conversion