英文题目: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形输入字符串,然后按照列读取字符,得到一个新的字符,输出这个字符。
例如:字符串"PAYPALISHIRING",3
1 P A H N 2 A P L S I I G 3 Y I R
我的解题思路把这个倒Z型拉直,不难发现字符串对应的行数分别是1232123.......,我们需要两个变量,一个索引‘’ i‘’ ,用来讲对应字符添加到第n行,还有一个用来控制方向 ‘’n‘’,小于 行数最大值则n+1,等于最大值时则换个方向 n -= 1,索引 i 则一直往上加,直到取满整个字符串。
我的解题代码如下,有很多地方可以优化,只是提供大概思路:
1 class Solution(object): 2 def convert(self, s, numRows): 3 if numRows == 1: 4 return s 5 ldict = {} 6 for i in range(1,numRows+1): 7 ldict[i] = '' 8 n = 1 9 i = 0 10 while i < len(s): 11 while n < numRows: 12 if i == len(s): 13 break 14 ldict[n] += s[i] 15 n +=1 16 i +=1 17 while n > 1: 18 if i == len(s): 19 break 20 ldict[n] += s[i] 21 n -= 1 22 i += 1 23 out = '' 24 for i in ldict.values(): 25 out +=i 26 return out