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)
1 2 3
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:
1
string convert(string s, int numRows);
Example 1:
1 2
**Input:** s = "PAYPALISHIRING", numRows = 3 **Output:** "PAHNAPLSIIGYIR"
Example 2:
1 2 3 4 5 6 7 8
**Input:** s = "PAYPALISHIRING", numRows = 4 **Output:** "PINALSIGYAHRPI" **Explanation:**
classSolution{ public String convert(String s, int numRows){ if (s == null || s.length() == 0 || numRows == 1) { return s; } int l = s.length(); StringBuilder sb = new StringBuilder(); int a = (numRows - 1) * 2; for (int i = 0; i < numRows; i++) { int b = a - 2 * i; for (int j = i; j < l; j += a) { sb.append(s.charAt(j)); if (b != 0 && b != a && j + b < l) { sb.append(s.charAt(j + b)); } } } return sb.toString(); } }
classSolution{ public String convert(String s, int numRows){ if(s == null || s.length() == 0 || numRows <= 1) { return s; } StringBuilder[] builders = new StringBuilder[numRows]; int cur = 0; int direction = 1; for (int i = 0; i < builders.length; i++) { builders[i] = new StringBuilder(); } for (int i = 0; i < s.length(); i++) { builders[cur].append(s.charAt(i)); cur += direction; if (cur == numRows) { cur -= 2; direction = -1; } elseif (cur == -1) { cur += 2; direction = 1; } } for (int i = 1; i < builders.length; i++) { builders[0].append(builders[i]); } return builders[0].toString(); } }