ZigZag Conversion
Description
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(javascript)
/**
* @param {string} s
* @param {number} numRows
* @return {string}
*/
var convert = function(s, numRows) {
if(numRows == 1) return s;
var getChar = function(str, idx){
if(idx < 0 || idx >= str.length) return '';
return str.charAt(idx);
}
var out = '';
var len = s.length;
for(var i = 0; i < numRows; i++){
var pos = 0;
while(pos + 2 - numRows <= len){
if(i == 0 || i == numRows - 1){
out += getChar(s, pos + i);
} else {
out += getChar(s, pos - i) + getChar(s, pos + i);
}
pos += 2 * numRows - 2;
}
}
return out;
};