# Zigzag Pattern String Conversion - Leet Code Solution

August 27, 2019

## Problem Statement

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:

``````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

If you look the pattern, its going in two directions:

• Top to bottom straight
• Bottom to top with one incremented index

You need one flag to indicate whether you are going downward or going upward.

## Algorithm

• Maintain a flag to indicate whether you are going upward or downward. Reset boundaries are on 0-index and length-1 index.
• Toggle the flag on reaching boundaries (top most, or bottom most)
• Maintain a List of string(StringBuffer in Java). List length is equal to the number of rows asked.
• Maintain a variable which will tell you in which stringbuffer(row num) to add the current character

## Code

``````public class Q6_ZigZagConversion {
private String str;

public Q6_ZigZagConversion(String str) {
this.str = str;
}

public String conversion(int numRows) {
int l = this.str.length();
List<StringBuffer> zigzag = new ArrayList<StringBuffer>();
for (int i=0; i<numRows; i++) {
}

boolean comingFromTop = true;
int zig = 0;
for (int i=0; i<l; i++) {
zigzag.get(zig).append(this.str.charAt(i));

if (zig == numRows-1) {
comingFromTop = false;
}
else if (zig == 0) {
comingFromTop = true;
}
zig = comingFromTop ? zig + 1 : zig - 1;
zig = zig % numRows;
}

StringBuffer sb = new StringBuffer();
for (int i=0; i<numRows; i++) {
sb.append(zigzag.get(i));
}

return sb.toString();
}
}``````

## Similar Posts

### Leetcode - Split a String Into the Max Number of Unique Substrings

Problem Statement Given a string s, return the maximum number of unique…

### Leetcode - Maximum Non Negative Product in a Matrix

Problem Statement You are given a rows x cols matrix grid. Initially, you are…

### Convert String to Integer - atoi - Leet Code Solution

Problem Statement Implement atoi which converts a string to an integer…

### Counting Inversions Coding Problem

** Inversion There is an array(a) and two indexes i and j. Inversion is the…

### How to calculate First Common Ancestor of two Nodes in Binary Tree

First try to understand question. Its a binary tree, not a binary search tree…

## Latest Posts

### Jenkins Pipeline with Jenkinsfile - How To Schedule Job on Cron and Not on Code Commit

Introduction In this post we will see following: How to schedule a job on cron…

### How to Git Clone Another Repository from Jenkin Pipeline in Jenkinsfile

Introduction There are some cases, where I need another git repository while…

### How to Fetch Multiple Credentials and Expose them in Environment using Jenkinsfile pipeline

Introduction In this post, we will see how to fetch multiple credentials and…

### Jenkins Pipeline - How to run Automation on Different Environment (Dev/Stage/Prod), with Credentials

Introduction I have an automation script, that I want to run on different…

### Jenkinsfile - How to Create UI Form Text fields, Drop-down and Run for Different Conditions

Introduction I had to write a CICD system for one of our project. I had to…

### Java Log4j Logger - Programmatically Initialize JSON logger with customized keys in json logs

Introduction Java log4j has many ways to initialize and append the desired…