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("");
};