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 RAnd 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"
.
Subscribe to see which companies asked this question
按照下面的过程来走一遍就行了。
zigzag长成这个样。
/*n=numRows
Δ=2n-2 1 2n-1 4n-3
Δ= 2 2n-2 2n 4n-4 4n-2
Δ= 3 2n-3 2n+1 4n-5 .
Δ= . . . . .
Δ= . n+2 . 3n .
Δ= n-1 n+1 3n-3 3n-1 5n-5
Δ=2n-2 n 3n-2 5n-4
*/
class Solution(object):
def convert(self, s, numRows):
#print s
if numRows == 1:
return s
l = len(s)
r = numRows
res = ''
for i in xrange(r):
#print i
j = 0
if i == 0:
while j < l:
try :
res += s[j*(r-1)]
j += 2
except:
#print res
j = l
elif i < r-1:
while j < l:
try:
if j == 0:
res += s[i]
else:
res += s[j*(r-1) - i]
res += s[j*(r-1) + i]
j += 2
except:
#print res
j = l
else:
j = 1
while j <l:
try:
res += s[j*(r-1)]
j+=2
except:
#print res
j = l
return res