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

Solution:

public class Solution {
    public String convert(String s, int numRows) {
        if(numRows==1) return s; /* important */
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<numRows; i++){
            int j=i;
            int step=2*numRows-2;
            if(i==0 || i==numRows-1){
                while(j<s.length()){
                    sb.append(s.charAt(j));
                    j += step;
                }
            } else {
                while(j<s.length()){
                    sb.append(s.charAt(j));
                    if(j+step-2*i<s.length()) sb.append(s.charAt(j+step-2*i));
                    j += step;
                }
            }
            
        }
        return sb.toString();
    }
}
comments powered by Disqus