# Leetcode ZigZag Conversion Java Solution

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 s, int numRows);`

Example 1:

```Input: s = "PAYPALISHIRING", numRows = 3
Output: "PAHNAPLSIIGYIR"
```

Example 2:

```Input: s = "PAYPALISHIRING", numRows = 4
Output: "PINALSIGYAHRPI"
Explanation:

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

Solution:

``````class HackerHeap {
public String convert(String s, int numRows) {
if(s.isEmpty() || numRows == 0 || numRows == 1)
return s;
String[] collector = new String[numRows];
int c = 0;
int subC = 0;
while(c < s.length()) {
int idx = Math.abs(subC);
if(collector[idx] == null)
collector[idx] = String.valueOf(s.charAt(c));
else
collector[idx] = collector[idx]+s.charAt(c);
c++;
if(subC == numRows-1)
subC *= -1;
subC++;
}

StringBuilder result = new StringBuilder();

for(int i = 0; i < numRows; i++) {
if(collector[i] != null)
result.append(collector[i]);
}

return result.toString();
}
}``````