Zigzag Conversion – Leetcode Solution

In this post, we are going to solve the 6. Zigzag Conversion problem of Leetcode. This problem 6. Zigzag Conversion is a Leetcode medium level problem. Let’s see code, 6. Zigzag Conversion.

Problem

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

Example 3 :


Input: s = "A", numRows = 1
Output: "A"

Constraints

  • 1 <= s.length <= 1000
  • s consists of English letters (lower-case and upper-case), ',' and '.'.
  • 1 <= numRows <= 1000

Now, let’s see the code of 6. Zigzag Conversion – Leetcode Solution.

Zigzag Conversion – Leetcode Solution

6. Zigzag Conversion – Solution in Java

class Solution {
    public String convert(String s, int nRows) {
        char[] c = s.toCharArray();
        int len = c.length;
        StringBuffer[] sb = new StringBuffer[nRows];
        for (int i = 0; i < sb.length; i++) sb[i] = new StringBuffer();

        int i = 0;
        while (i < len) {
            for (int idx = 0; idx < nRows && i < len; idx++) // vertically down
                sb[idx].append(c[i++]);
            for (int idx = nRows-2; idx >= 1 && i < len; idx--) // obliquely up
                sb[idx].append(c[i++]);
        }
        for (int idx = 1; idx < sb.length; idx++)
            sb[0].append(sb[idx]);
        return sb[0].toString();
    }   
}

6. Zigzag Conversion – Solution in C++

class Solution {
public:
    string convert(string s, int numRows) {
        vector<string> vs(numRows, "");
        int n = s.length(), i = 0;
        while (i < n) {
            for (int j = 0; j < numRows && i < n; j++)
                vs[j].push_back(s[i++]);
            for (int j = numRows - 2; j >= 1 && i < n; j--)
                vs[j].push_back(s[i++]);
        }
        string zigzag;
        for (string v : vs) zigzag += v;
        return zigzag;
    } 
};

6. Zigzag Conversion – Solution in Python

class Solution(object):
    def convert(self, s, numRows):
        """
        :type s: str
        :type numRows: int
        :rtype: str
        """
        if numRows == 1 or numRows >= len(s):
            return s

        L = [''] * numRows
        index, step = 0, 1

        for x in s:
            L[index] += x
            if index == 0:
                step = 1
            elif index == numRows -1:
                step = -1
            index += step

        return ''.join(L)

Note: This problem 6. Zigzag Conversion is generated by Leetcode but the solution is provided by CodingBroz. This tutorial is only for Educational and Learning purpose.

1 thought on “Zigzag Conversion – Leetcode Solution”

  1. Python solution is shit. I could tell by reading the code what it would produce, and it’s not what the problem asks for. If you’re going to post code on the internet, at least test it first. Never appreciated my ad-blocker more than I do after visiting this page.

Leave a Comment

Your email address will not be published. Required fields are marked *