题目
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)
给定一个字符串,按照特定的行数对这个字符串进行竖Z型输出
思路
保存结果的数组初始值只需定义numRows个空元素就行,依次开始对s进行取值进行保存,每满足一个循环周期后就开始逆方向循环保存值,保存结果的数组的每个值代表了哪些字符处于同一行.
代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/usr/bin/env python3
class Solution(object):
def convert(self, s, numRows):
'''
把一个字符串按照一定行数进行竖Z字型排列,并输出.
保存结果的数组初始值只需定义numRows个空元素就行,依次开始对s进行取值进行保存,
每满足一个循环周期后就开始逆方向循环保存值,保存结果的数组的每个值代表了哪些字符处于同一行.
:param str z: 字符串
:param int numRows: 竖Z字型的行数
'''
# 如果数组长度为1,直接返回这个数组
if numRows == 1:
return s
# 定义循环周期,即每循环一个周期,增长方向就要改变一次,用负数位置来进行数组方向的逆方向循环保存值
p = 2 * (numRows - 1)
# 定义一个空数组,用来存放结果
result = [""] * numRows
# 开始循环
for i in range(len(s)):
floor = i % p
# r如果元素位置已经到了该逆向赋值的情况下,调转方向
if floor >= p//2:
floor = p - floor
result[floor] += s[i]
return "".join(result)
if __name__ == '__main__':
s = Solution()
print(s.convert("PAYPALISHIRING", 3))