Skip to content

6 ZigZag Conversion – Easy

Problem:

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

Thoughts:

Use a delta flag to indicate whether next move should go up or go down.

Solutions:

public class Solution {
    public String convert(String s, int nRows) {
        String[] helper = new String[nRows];
        for (int i = 0; i < nRows; i ++){
            helper[i] = "";
        }
        int row = 0;
        int delta = 1;
        for (int i = 0; i < s.length(); i ++){
            char c = s.charAt(i);
            helper[row] += c;
            if (row == nRows - 1){
                delta = -1;
            }
            else if (row == 0){
                delta = 1;
            }
            row = row + delta;
            row = Math.max(0, row);
        }//for
        String result = "";
        for (int i = 0; i < nRows && s.length() > 0; i ++){
            result += helper[i];
        }
        return result;
    }
}