首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解leetcode ZigZag

了解leetcode ZigZag
EN

Stack Overflow用户
提问于 2020-05-23 16:46:27
回答 1查看 50关注 0票数 0

谁能给我解释一下leetcode ZigZag的问题?

问题[Link]

字符串"PAYPALISHIRING“以Z字形图案写在给定的行数上,如下所示:(您可能希望以固定字体显示此图案,以提高易读性)

代码语言:javascript
复制
P   A   H   N
A P L S I I G
Y   I   R

然后逐行阅读:"PAHNAPLSIIGYIR“

编写接受字符串的代码,并在给定行数的情况下进行此转换:

string convert(string s,int numRows);

示例1:

输入:S= "PAYPALISHIRING",numRows =3输出:"PAHNAPLSIIGYIR“

示例2:

输入:S= "PAYPALISHIRING",numRows =4输出:"PINALSIGYAHRPI“解释:

代码语言:javascript
复制
P     I    N
A   L S  I G
Y A   H R
P     I

我不是在找任何人来解决这个问题。请帮助我理解这个问题。

EN

回答 1

Stack Overflow用户

发布于 2021-06-02 00:03:38

代码语言:javascript
复制
  def convert(self, s: str, numRows: int) -> str:
        #
        if numRows <2 or len(s)<numRows: return s
        n = numRows-1
        step = n*2
        res = s[::step]
        for i in range(1,n):
            for v,w in itertools.zip_longest(s[i::step],s[step-i::step],fillvalue=''):
                res += v+w
        return res + s[n::step]

或者不使用lib。(类似的想法)

代码语言:javascript
复制
def convert(self, s, numRows):
    step = (numRows == 1) - 1  # 0 or -1  
    rows, idx = [''] * numRows, 0
    for c in s:
        rows[idx] += c
        if idx == 0 or idx == numRows-1: 
            step = -step  #change direction  
        idx += step
    return ''.join(rows)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61969542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档