Question
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 text, int nRows);
convert(“PAYPALISHIRING”, 3) should return “PAHNAPLSIIGYIR”.
Hide Tags String
Analysis
easy math problem
Solution
v1.
This solution requires O(n) space complexity.
class Solution:
# @param {string} s
# @param {integer} numRows
# @return {string}
def convert(self, s, numRows):
if len(s)==0:
return ""
if numRows==1:
return s
d = 2*numRows -2
stemp = ['' for dummy in range(numRows)]
for i in range(len(s)):
rest = i%d
if rest>(d/2):
rest = d - rest
stemp[rest] += s[i]
res = ''
for val in stemp:
res += val
return res
v2 (Other′s Solution)
This solution: O(1) space complexity.
class Solution:
# @param {string} s
# @param {integer} numRows
# @return {string}
def convert(self, s, numRows):
if len(s)==0:
return ""
if numRows==1:
return s
d = 2*numRows -2
res = ''
for i in range(numRows):
j = i
while j<len(s):
res += s[j]
if i!=0 and i!=(numRows-1) and j+d-2*i<len(s):
res += s[j+d-2*i]
j += d
return res