1. 题目

【LeetCode】 Z 字形变换_leetcode

2. 分析

充分地思考问题,然后得出抽象解,最后再写代码。
本题初看是有点儿麻烦的,因为有个N型的变换,但是如果把这个N型压缩一下,其实就是考虑每行放什么值的问题。那么问题就简化成当前的字符串的字符需要放在哪一行?做一个处理就ok了。

3. 代码

class Solution:
    def convert(self, s: str, numRows: int) -> str:
        res = [[]for i in range(numRows)]
        idx = 0
        up = 0
        down = 1 # 初始值向下
        for i in range(len(s)):
            res[idx].append(s[i])
            if down:
                idx += 1
            elif up:
                idx -= 1
            if idx == numRows: # 只能往上
                idx -= 2
                up = 1
                down = 0
            elif idx < 0:
                idx += 2
                up = 0
                down = 1
        # print(res)
        out = ""
        for i in res:
            out = out + "".join(i)
        return out