# Zigzag Conversion Program Solution

We at gradjobopenings.com provide free job alerts of freshers job drives. In this website we list on campus job openings for freshers and off campus job openings for freshers and also work from home job openings. This is the best website to apply for off campus drive in India. Visit our website for government job alerts and private job alerts. We also list free interview notes and study materials, one of the best interview study website.comfortable to face the interviews:

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
```

Example 3:

```Input: s = "A", numRows = 1
Output: "A"
```

Constraints:

• `1 <= s.length <= 1000`
• `s` consists of English letters (lower-case and upper-case), `','` and `'.'`.
• `1 <= numRows <= 1000`
• Time: O(|\texttt{s}|)O(∣s∣)
• Space: O(|\texttt{s}|)O(∣s∣)

### Zigzag Conversion Program Solution in C++

``````class Solution {
public:
string convert(string s, int numRows) {
string ans;
vector<vector<char>> rows(numRows);
int k = 0;
int direction = (numRows == 1) - 1;

for (const char c : s) {
rows[k].push_back(c);
if (k == 0 || k == numRows - 1)
direction *= -1;
k += direction;
}

for (const auto& row : rows)
for (const char c : row)
ans += c;

return ans;
}
};
``````

### Zigzag Conversion Program Solution in Java

``````class Solution {
public String convert(String s, int numRows) {
StringBuilder sb = new StringBuilder();
List<Character>[] rows = new List[numRows];
int k = 0;
int direction = numRows == 1 ? 0 : -1;

for (int i = 0; i < numRows; ++i)
rows[i] = new ArrayList<>();

for (final char c : s.toCharArray()) {
if (k == 0 || k == numRows - 1)
direction *= -1;
k += direction;
}

for (List<Character> row : rows)
for (final char c : row)
sb.append(c);

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

### Zigzag Conversion Program Solution in Python

``````class Solution:
def convert(self, s: str, numRows: int) -> str:
rows = [''] * numRows
k = 0
direction = (numRows == 1) - 1

for c in s:
rows[k] += c
if k == 0 or k == numRows - 1:
direction *= -1
k += direction

return ''.join(rows)
``````