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 NA P L S I GY 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 text, int nRows );
Convert ("PAYPALISHIRING", 3)
Shocould return"PAHNAPLSIIGYIR"
.
The key to solving the problem of ZigZag conversion is to find a loop. (2 * nRows-2) characters constitute a loop.
1 string convert (string s, int nRows) 2 {3 string * st = new string [nRows]; 4 int k, I; 5 if (nRows <= 1) 6 return s; 7 8 for (I = 0; I <s. length (); I ++) 9 {10 k = I % (2 * nRows-2); 11 if (k> = (nRows-1 )) 12 st [2 * (nRows-1)-k] + = s [I]; 13 else14 st [k] + = s [I]; 15} 16 17 s = ""; 18 for (I = 0; I <nRows; I ++) 19 s + = st [I]; 20 21 return s; 22}
Leetcode 6. ZigZag Conversion