304 North Cardinal St.
Dorchester Center, MA 02124

# Zigzag Conversion LeetCode Solution

## Problem – Zigzag Conversion LeetCode 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
``````

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`

### Zigzag Conversion LeetCode Solution in Java

``````public String convert(String s, int nRows) {
char[] c = s.toCharArray();
int len = c.length;
StringBuffer[] sb = new StringBuffer[nRows];
for (int i = 0; i < sb.length; i++) sb[i] = new StringBuffer();

int i = 0;
while (i < len) {
for (int idx = 0; idx < nRows && i < len; idx++) // vertically down
sb[idx].append(c[i++]);
for (int idx = nRows-2; idx >= 1 && i < len; idx--) // obliquely up
sb[idx].append(c[i++]);
}
for (int idx = 1; idx < sb.length; idx++)
sb.append(sb[idx]);
return sb.toString();
}
``````

### Zigzag Conversion LeetCode Solution in Python

``````class Solution(object):
def convert(self, s, numRows):
"""
:type s: str
:type numRows: int
:rtype: str
"""
if numRows == 1 or numRows >= len(s):
return s

L = [''] * numRows
index, step = 0, 1

for x in s:
L[index] += x
if index == 0:
step = 1
elif index == numRows -1:
step = -1
index += step

return ''.join(L)
``````

### Zigzag Conversion LeetCode Solution in C++

``````string convert(string s, int nRows) {

if (nRows <= 1)
return s;

const int len = (int)s.length();
string *str = new string[nRows];

int row = 0, step = 1;
for (int i = 0; i < len; ++i)
{
str[row].push_back(s[i]);

if (row == 0)
step = 1;
else if (row == nRows - 1)
step = -1;

row += step;
}

s.clear();
for (int j = 0; j < nRows; ++j)
{
s.append(str[j]);
}

delete[] str;
return s;
}
``````

### Zigzag Conversion LeetCode Solution in Swift

``````class Solution {
func convert(_ s: String, _ numRows: Int) -> String {
guard s.count > 1 && numRows > 1 else { return s }

var lines = [[Character]](repeating: [], count: numRows)
var idx = 0
var flag = false

for ch in s {
lines[idx].append(ch)
idx += flag ? -1 : 1
guard idx == -1 || idx == numRows else { continue }
idx += flag ? 2 : -2
flag.toggle()
}
return lines.map { String(\$0) }.joined()
}
}
``````
##### Zigzag Conversion LeetCode Solution Review:

In our experience, we suggest you solve this Zigzag Conversion LeetCode Solution and gain some new skills from Professionals completely free and we assure you will be worth it.

If you are stuck anywhere between any coding problem, just visit Queslers to get the Zigzag Conversion LeetCode Solution

Find on LeetCode

##### Conclusion:

I hope this Zigzag Conversion LeetCode Solution would be useful for you to learn something new from this problem. If it helped you then don’t forget to bookmark our site for more Coding Solutions.

This Problem is intended for audiences of all experiences who are interested in learning about Data Science in a business context; there are no prerequisites.

Keep Learning!

More Coding Solutions >>

LeetCode Solutions

Hacker Rank Solutions

CodeChef Solutions