解题思路:
这道题目的目的是将字符串摆成一个之字型,就是将字符串竖着排列,然后一列是长的一列是短的,长的列为numRows短的为numRows-2。所以用一个数组来存储每一行的字符,用变量row来记录当前访问到的行,依次将字符串s中的字符放入不同的行,然后将所有行的字符串串联起来。
代码说明:
1、zigzag = ['' for i in range(numRows)]表示产生numRows个为''的数组。
2、row表示行数,step是一个标志表示下一步是向上走还是向下走。 if row == 0: step = 1 if row == numRows - 1: step = -1表示到第一行时向下走,走到最后一行开始向上走。
3、''.join((zigzag))表示把zigzag的数组组合起来
测试代码:
class Solution:
def convert(self, s, numRows):
"""
:type s: str
:type numRows: int
:rtype: str
"""
if numRows <= 1:
return s
zigzag = ['' for i in range(numRows)]
row = 0
step = 1
for c in s:
if row == 0:
step = 1
if row == numRows - 1:
step = -1
zigzag[row] += c
row += step
return ''.join((zigzag))
s = '0123456789abcdef'
numRows = 4
print(Solution().convert(s, numRows)) #提交时请删除该行