Simulate the zigzag placement using an array of strings representing rows. Track the current row index and direction (downward or upward), appending characters as you iterate through the string.
class Solution:
def convert(self, s: str, numRows: int) -> str:
if numRows == 1 or numRows >= len(s):
return s
rows = [''] * numRows
curr_row = 0
going_down = False
for c in s:
rows[curr_row] += c
if curr_row == 0 or curr_row == numRows - 1:
going_down = not going_down
curr_row += 1 if going_down else -1
return ''.join(rows)
class Solution {
public String convert(String s, int numRows) {
if (numRows == 1 || numRows >= s.length()) return s;
StringBuilder[] rows = new StringBuilder[numRows];
for (int i = 0; i < numRows; i++) rows[i] = new StringBuilder();
int currRow = 0;
boolean goingDown = false;
for (char c : s.toCharArray()) {
rows[currRow].append(c);
if (currRow == 0 || currRow == numRows - 1) goingDown = !goingDown;
currRow += goingDown ? 1 : -1;
}
StringBuilder res = new StringBuilder();
for (StringBuilder row : rows) res.append(row);
return res.toString();
}
}