题目分析:​​https://leetcode-cn.com/problems/zigzag-conversion/​

思路分析:

这道题与其说叫Z字形变换,不如叫N字形变换。

题目要求造多少行,我们就设多少个数组。
将这些数组全部放到一个数组里。
其实就是造了一个二维数组 设为res。
这样每一行我们就可以表示成 res[0],res[1]

假设需要造3行。
大致思路其实很简单,直接遍历所给字符串S。
填写顺序 res[0] res[1] res[2] res[1] res[0] res [1] res[2]…
看出来了吧,就是来回遍历该二维数组里的一维数组,从头到尾,在从尾到头。直到字符串S遍历完。

最后我们将整个二维数组变成一维数组就行了。

这段代码写的时候脑子不太清醒,各种溢出。所以写的比较杂乱。

完整代码:

class Solution:
def convert(self, s: str, numRows: int) -> str:
if len(s) <= 2 or numRows == 1:
return s
ll = []
for k in range(numRows):
ll.append([])

i = 0
j = 0
while j != len(s):
while i < numRows and j != len(s):
if i == -1: # 说明已经不是第一次遍历了
i = 1
ll[i].append(s[j])
i += 1
j += 1

if i == numRows and j != len(s):
i = numRows - 2
while j != len(s) and i != -1:
ll[i].append(s[j])
j += 1
i -= 1


res = []
for p in ll:
res.extend(p)
print(type(res[0]))

return "".join(res)