6_ZigZag Conversion

[Medium]

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 1: slower

Idea:

  • For each row, loop over the input string once, and find the letters corresponding to right index, append to output.

Time Complexity: O(n)O(n) loop over each element in the input numRows times

Space Complexity: O(n)O(n)

Solution 2: faster

Idea:

  • Initiate with an output array in which each element corresponds to one row.

  • Loop over each element in the string, with the direction. Direction goes down unless meet the last row.

Time Complexity: O(n)O(n) loop over each element in the input once

Space Complexity: O(n)O(n)

Last updated

Was this helpful?