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