leetcode (力扣) 6. Z 字形变换 (模拟)
原创
©著作权归作者所有:来自51CTO博客作者深度不学习的原创作品,请联系作者获取转载授权,否则将追究法律责任
题目分析: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)