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".We add another example to clarify, same string with 4 rows
P I N
A L S I G
Y A H R
P I
convert("PAYPALISHIRING", 4) should return "PINALSHIGYAHRPI"Solution:
class Solution:
# @return a string
def convert(self, s, nRows):
if nRows == 1:
return s
solution = []
for i in range(0, nRows):
count = i
step1 = 2*(nRows-1-i)
step2 = 2*i
while count < len(s):
solution.append(s[count])
if step1 > 0 and step2 > 0 and count+step1<len(s):
count += step1
solution.append(s[count])
count += step2
else:
count +=(step1+step2)
return "".join(solution)
Nice explanation, thank you very much :)
ReplyDelete