力扣-Z字形变换

Z字形变换

题目描述

题目链接:https://leetcode-cn.com/problems/zigzag-conversion/

难度:中等

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:

P   A   H   N
A P L S I I G
Y   I   R

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"
请你实现这个将字符串进行指定行数变换的函数

解析

本题意思是提供一个字符串,让你进行如样例所示的Z字形变换,然后将变换后的部分中的字符从左到右从上到下组成一个新的字符串。感觉是一道模拟题。

解法:就硬来,模拟变换,申请numRows个字符串,分别代表第\(i\)行,然后对输入中的每个字符,按照1, 2, ...,n - 1, n, n - 1, ..., 2, 1的下标顺序加到上述的字符串数组的尾端,最后将申请的字符串数组依次拼接即可得到最终答案。

代码

果然这种题用python写起来最方便

class Solution:
    def convert(self, s: str, numRows: int) -> str:
        arrs = ["" for i in range(numRows)]

        step = 1
        pos = 0

        for c in s:
            arrs[pos] += c

            pos += step
            if pos < 0 or pos == numRows:
                step = -step
                pos += step * 2
        
        return "".join(arrs)

总结

所以模拟题就应该直接模拟,少想写花里胡哨的

posted @ 2022-01-19 19:28  XBCoder  阅读(31)  评论(0)    收藏  举报