Skip to main content

Leetcode 6: Zigzag Conversion

 


1. Problem Statement (Simple Explanation):


  • You are given:

  • A string s

    • An integer numRows

    • You write the characters of s in a zigzag pattern across numRows rows, and then read the characters row by row to form a new string.

  • You need to return that new string.


2. Examples:


Example 1:


Input: s = "PAYPALISHIRING", numRows = 3

Output: "PAHNAPLSIIGYIR"

Explanation:

Zigzag pattern (3 rows):

P    A    H  N

A P L S I I G

Y    I     R

Read row by row → "PAHNAPLSIIGYIR"


Example 2:


Input: s = "PAYPALISHIRING", numRows = 4

Output: "PINALSIGYAHRPI"

Explanation:

Zigzag pattern (4 rows):

P       I      N

A   L S    I G

Y A   H R

P      I

                Read row by row → "PINALSIGYAHRPI"


Example 3:


Input: s = "A", numRows = 1

Output: "A"

Explanation:

Only one row, so the result is the same string.


3. Key Observations:


  1. When numRows == 1 or numRows >= len(s), there is no zigzag effect; return s directly.

  2. The characters “go down” row by row, then “go up diagonally” and repeat:

    • Row sequence goes: 0,1,2,...,numRows-1,numRows-2,...,1,0,...

  3. We can simulate the process:

    • Maintain a buffer string for each row.

    • Traverse the input characters while moving a pointer currentRow up and down.


4. Approach 1 – Simulation with Row Strings (Recommended):


Intuition:


  • Create an array/list of strings, one per row.

  • Start at row 0, direction “down”.

  • For each character:

    • Append it to the current row’s string.

    • If we’re at the top row, change direction to “down”.

    • If we’re at the bottom row, change direction to “up”.

    • Move currentRow accordingly.

  • At the end, concatenate all row strings.

This directly simulates the zigzag writing.


Algorithm (Step-by-Step):


  1. If numRows == 1 or numRows >= len(s), return s.

  2. Initialize an array rows of min(numRows, len(s)) empty strings.

  3. Set:

    • currentRow = 0

    • goingDown = false

  4. For each character c in s:

    • Append c to rows[currentRow].

    • If currentRow == 0 or currentRow == numRows - 1, flip goingDown (toggle).

    • If goingDown == true, currentRow++, else currentRow--.

  5. Join all strings in rows and return the result.


Pseudo-code (Simulation):



Time and Space Complexity:


Let n=len(s).

  • Time: O(n)

We visit each character exactly once and append it.

  • Space: O(n)

for storing the output + row buffers.

This is efficient for n≤1000 and is the standard solution.


5. (Optional) Approach 2 – Index Arithmetic / Row Skipping:


  • We can compute row-by-row indices using cycle length:

                    cycleLen=2×(numRows-1)
  • For row 0 and last row, jump by full cycles.

  • For middle rows, there are two positions per cycle.

But this is more complex to explain; the simulation approach is clearer and perfectly efficient for constraints.


6. Java code:



7. C code:



8. C++ code:



9. Python code:



10. JavaScript code:




NEXT>>>



Comments

Popular posts from this blog

Leetcode 1: Two Sum

  Leetcode Link: https://leetcode.com/problems/two-sum/ 1. Problem Statement (Simple Explanation) You are given: An array of integers nums An integer target You need to  return the indices of two numbers in the array  such that: Conditions: Each input has  exactly one solution . You  cannot use the same element twice . You can return the answer in  any order . 2. Examples Example 1 Input:                                    nums = [2, 7, 11, 15], target = 9 Output:                                 [0, 1] Explanation:                     nums[0]+nums[1]=2+7=9              So we return [0, 1]. Example 2 Input:           ...

Leetcode 3: Longest Substring Without Repeating Characters

  Leetcode Link 1. Problem Statement (Simple Explanation) You are given a string s. You need to find the length of the longest substring of s that does not  contain any repeated characters. A substring is a contiguous sequence of characters in the string. You must return an integer length, not the substring itself. 2. Examples Example 1 Input: s = "abcabcbb" Output: 3 Explanation: Some substrings without repeating characters: "abc", "bca", "cab"The longest length is 3. Example 2 Input: s = "bbbbb" Output: 1 Explanation: All substrings that are valid are just "b". The longest length is 1. Example 3 Input:   s = "pwwkew" Output:   3 Explanation: Possible substrings without repetition: "pw", "wke", "kew". "wke" or "kew" have length 3. "pwke" is not valid because it’s not contiguous in the original string (p and k are separated by ww). Constraints...

Leetcode 2: Add Two Numbers

Leetcode Link: https://leetcode.com/problems/add-two-numbers/ 1. Problem Statement (Simple Explanation) You are given  two non-empty linked lists , l1 and l2, that represent two non-negative integers. Each node contains a  single digit . The digits are stored in  reverse order  (i.e., the 1’s digit is at the head). You need to  add the two numbers  and return the  sum as a linked list , also in reverse order. You can assume: There are  no leading zeros , except when the number itself is 0. 2. Examples Example 1 Input:                l1 = [2,4,3]                l2 = [5,6,4]           Interpreting linked lists as numbers (reverse order): l1 represents 342 l2 represents 465 Output:                [7,0,8] Explanation:        ...