题目:ZigZag Conversion
连接:https://leetcode.com/problems/zigzag-conversion/#/description
原题:
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"
.
思路:
本题有两个思路:第一个是简单粗暴的按照他的说法用一个for循环生成z型的字符串,用n个列表装起来(要求多少行就多少个列表),然后再一个个地输出这些列表;第二个思路是找规律,计算出每一行所包含的字母下标的规律,根据该规律来遍历一次原字符串就可输出结果。
解题是用了第一种思路,写起来更快,但是效率肯定不高
代码:
class Solution(object):
def convert(self, s, numRows):
"""
:type s: str
:type numRows: int
:rtype: str
"""
if numRows == 1:
return s
zigzag_list = [''] * numRows
dire = 1
zi = 0
for i in range(0, len(s)):
zigzag_list[zi] += s[i]
zi += dire
if zi == (numRows-1):
dire = -1
elif zi == 0:
dire = 1
out_str = ''
for ss in zigzag_list:
out_str += ss
return out_str