题目大意
在行数row给定时,字符串“PAYPALISHIRING”的Z字形(zigzag)输出
解题思路
按行排序
创建一个二维数组,里面有row个数组。
设置好step=+1,一步步到了第3(row)步,将step设置为-1,往回走一步,再往回走一步,只到回到第一步,再将step设置为+1,如此循环。
最后将二维数组内list合并
按行访问
https://leetcode-cn.com/problems/zigzag-conversion/solution/
代码
按行排序
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
zigzag = [[] for x in range(numRows)]
row, step = 0, 1
for c in s:
zigzag[row] += c,
if row == 0:
step = 1
elif row == numRows - 1:
step = -1
row += step
# return ''.join(reduce(operator.add, zigzag))
# [[u'P', u'A', u'H', u'N'], [u'A', u'P', u'L', u'S', u'I', u'I', u'G'], [u'Y', u'I', u'R']]
result = ''
for i in range(len(zigzag)):
result += ''.join(zigzag[i]) # list拼接为字符串
return result