# 6. 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 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
``````
``````
/**
* @param {string} s
* @param {number} numRows
* @return {string}
*/
var convert = function(s, numRows) {
var data = new Array(numRows);
var up = false; // up or down? used in-between tops and bottoms

for(var i = 0, j = 0; i < s.length; i ++){
// init arr elems
if(data[j] === undefined){
data[j] = "";
}
// append cur char
data[j] += s.charAt(i);

if(j == 0){
// On top
up = false; // Change direction
j ++;
} else if(j == numRows-1){
// On bottom
up = true;  // Then go up
j --;
} // in-between, follow prev direction
else if(up){
j --;
} else {
j ++;
}
}
// Join/concat arr of str to single arr
return data.join("");
};
``````

This site uses Akismet to reduce spam. Learn how your comment data is processed.