Concatenation of ZigZag String in N Rows (original) (raw)

Last Updated : 23 Jul, 2025

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.

Therefore, for given string str and an integer N, the task is to print the string formed by concatenating N rows when str is written in row-wise Zig-Zag fashion.

Example:

Input: str = "PAYPALISHIRING", N = 3
Output: PAHNAPLSIIGYIR

Input: str = "ABCDEFGH", N = 2
Output: ACEGBDFH
Explanation: The input string can be written in Zig-Zag fashion in 2 rows as follows:
A C E G
B D F H
Hence, upon reading the above pattern row-wise, the output string is "ACEGBDFH"

Approach: The given problem is an implementation based problem that can be solved by following the below steps

Below is the implementation of the above approach:

C++ `

// C++ code for the above approach #include <bits/stdc++.h> using namespace std;

// Function that Prints concatenation of // all rows of str's Zig-Zag fashion void printZigZagConcat(string str, int n) { if (n == 1) { cout << str << endl; } string res = ""; string arr[n] = {""}; bool down; int row = 0; // helps in building individual blocks of strings

for (int i = 0; i < str.size(); i++)
{
    arr[row].push_back(str[i]);
    if (row == n - 1)
    {
        down = false;
    }
    if (row == 0)
    {
        down = true;
    }
    if (!down)
        row--;
    else
        row++;
}

for (int i = 0; i < n; i++)
{
    cout << arr[i];
}

}

int main() { // Driver Code string str = "PAYPALISHIRING"; int N = 3; printZigZagConcat(str, N); return 0; }

// This code is contributed by Potta Lokesh

Java

// Java code for the above approach import java.util.*;

class GFG {

// Function that Prints concatenation of // all rows of str's Zig-Zag fashion static void printZigZagConcat(String str, int n) { if (n == 1) { System.out.print(str + "\n"); } String res = ""; String[] arr = new String[n]; for (int i = 0; i < n; i++) arr[i] = ""; boolean down = false; int row = 0; // helps in building individual blocks // of Strings

for (int i = 0; i < str.length(); i++) {
  if (row >= 0)
    arr[row] += (str.charAt(i));
  if (row == n - 1) {
    down = false;
  }
  if (row == 0) {
    down = true;
  }
  if (!down)
    row--;
  else
    row++;
}

for (int i = 0; i < n; i++) {
  System.out.print(arr[i]);
}

}

public static void main(String[] args) { // Driver Code String str = "PAYPALISHIRING"; int N = 3; printZigZagConcat(str, N); } }

// This code is contributed by umadevi9616

Python3

Python 3 program of the above approach

Function that Prints concatenation of

all rows of str's Zig-Zag fashion

def printZigZagConcat(str, n):

# Corner Case (Only one row)
if n == 1:
    print(str)
    return

# Find length of string
l = len(str)

# Create an array of
# strings for all n rows
arr = ["" for x in range(l)]

# Initialize index for
# array of strings arr[]
row = 0

# Traverse through
# given string
for i in range(l):

    # append current character
    # to current row
    arr[row] += str[i]

    # If last row is reached,
    # change direction to 'up'
    if row == n - 1:
        down = False

    # If 1st row is reached,
    # change direction to 'down'
    elif row == 0:
        down = True

    # If direction is down,
    # increment, else decrement
    if down:
        row += 1
    else:
        row -= 1

# Print concatenation
# of all rows
for i in range(n):
    print(arr[i], end="")

Driver Code

str = "PAYPALISHIRING" N = 3 printZigZagConcat(str, N)

C#

// C# program to implement above approach using System; using System.Collections; using System.Collections.Generic;

class GFG {

// Function that Prints concatenation of // all rows of str's Zig-Zag fashion static void printZigZagConcat(String str, int n) { if (n == 1) { Console.WriteLine(str); }

String[] arr = new String[n];
for (int i = 0 ; i < n ; i++)
  arr[i] = "";

bool down = false;
int row = 0; // helps in building individual blocks
// of Strings

for (int i = 0 ; i < str.Length ; i++) {
  if (row >= 0)
    arr[row] += (str[i]);
  if (row == n - 1) {
    down = false;
  }
  if (row == 0) {
    down = true;
  }
  if (!down)
    row--;
  else
    row++;
}

for (int i = 0; i < n; i++) {
  Console.Write(arr[i]);
}

}

// Driver code public static void Main(string[] args){

// Driver Code
String str = "PAYPALISHIRING";
int N = 3;
printZigZagConcat(str, N);

} }

// This code is contributed by subhamgoyal2014.

` JavaScript ``

<script>
    // JavaScript code for the above approach

    // Function that Prints concatenation of
    // all rows of str's Zig-Zag fashion
    const printZigZagConcat = (str, n) => {
        if (n == 1) {
            document.write(`${str}<br/>`);
        }
        let res = "";
        let arr = new Array(n).fill("");
        let down = false;
        let row = 0; // helps in building individual blocks of strings

        for (let i = 0; i < str.length; i++) {
            arr[row] += str[i];
            if (row == n - 1) {
                down = false;
            }
            if (row == 0) {
                down = true;
            }
            if (!down)
                row--;
            else
                row++;
        }

        for (let i = 0; i < n; i++) {
            document.write(arr[i]);
        }
    }

    // Driver Code
    let str = "PAYPALISHIRING";
    let N = 3;
    printZigZagConcat(str, N);

// This code is contributed by rakeshsahni

</script>

``

Time Complexity: O(N)
Auxiliary Space: O(N)