首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【leetcode刷题】20T5-Z 字形变换

【leetcode刷题】20T5-Z 字形变换

作者头像
木又AI帮
发布2020-02-16 19:25:24
3290
发布2020-02-16 19:25:24
举报
文章被收录于专栏:木又AI帮木又AI帮

木又同学2020年第5篇解题报告

leetcode第6题:Z 字形变换

https://leetcode-cn.com/problems/zigzag-conversion


【题目】

将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:

L   C   I   R
E T O E S I I G
E   D   H   N

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。

请你实现这个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

示例 1:
输入: s = "LEETCODEISHIRING", numRows = 3
输出: "LCIRETOESIIGEDHN"

示例 2:
输入: s = "LEETCODEISHIRING", numRows = 4
输出: "LDREOEIIECIHNTSG"
解释:
L     D     R
E   O E   I I
E C   I H   N
T     S     G

【思路】

首先考虑特殊情况,当numRows等于1或者大于len(s)时,返回原字符串即可。

其他情况,使用numRows个数组,依次存储对应的字符,最后将所有数组拼接在一起。

【代码】

python版本

class Solution(object):
    def convert(self, s, numRows):
        """
        :type s: str
        :type numRows: int
        :rtype: str
        """
        # 特殊情况
        if numRows == 1 or numRows >= len(s):
            return s

        res = [[] for i in range(numRows)]
        ascend = True
        index = 0
        for i, si in enumerate(s):
            res[index].append(si)
            # 到达0或者len(res)-1,考虑换方向,除了第一次
            if i != 0 and (index == 0 or index == len(res) - 1):
                ascend = not ascend
            if ascend:
                index += 1
            else:
                index -= 1
        return ''.join(''.join(ri) for ri in res)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 木又AI帮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档