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


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

示例 1:

输入:s = “PAYPALISHIRING”, numRows = 3
输出:“PAHNAPLSIIGYIR”

示例 2:

输入:s = “PAYPALISHIRING”, numRows = 4
输出:“PINALSIGYAHRPI”

示例 3:

输入:s = “A”, numRows = 1
输出:“A”

最开始看到,“???什么东西?Z ??”。仔细看下,其实就是找规律。

  • 第 0 行,k * 2 * (n - 1)
  • 第 n-1 行,k * 2 * (n - 1) + (n - 1)
  • 内部 i 行,k * 2 * (n - 1) + i 以及(k + 1) * 2 * (n - 1) - i

思路一:逐行遍历,首先访问 行 0 中的所有字符,接着访问 行 1,然后 行 2,依此类推…

def convert(s, num):if num == 1:return snleng = 2 * (num - 1)   #  nleng 是判断、添加元素的关键news = ""for i in range(num):  # 逐行遍历j = 0while j + i < len(s):news += s[j+i] if i not in [0,num-1] and j + nleng - i < len(s):  # 中间行news += s[j + nleng-i]  # (k + 1) * 2 * (n - 1) - i j += nlengreturn news

思路二:从左到右迭代 s,将每个字符添加到合适的行。使用当前行和当前方向这两个变量对合适的行进行跟踪。注意第0行、第n-1行时,方向的改变。

def convert(s, num):if num == 1:return sret, i, k = ['' for i in range(num)], 0, 1  # i:行数,k:方向和步长for el in s:ret[i] += eli += kif i in [0, num-1]:  # 方向改变k = -k return ''.join(ret)

Z 字形变换(Python)相关推荐

  1. leetcode6 Z字形变换 python

    题目: 将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数: P A H N A P L S I I G Y I R之后从左到右"PAHNAPLSIIG ...

  2. LeeTCode:6. Z 字形变换 python实现

    将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: 方法一: 为一个 类似 ...

  3. LeetCode Algorithm 6. Z 字形变换

    6. Z 字形变换 Ideas 这题的思路其实只要想到了就很简单,首先创建一个numRows行的矩阵,每一行用来存Z字变换后每一行的字符,然后遍历字符串s,其实就是从上往下然后从下往上填充到每一行,所 ...

  4. Z 字形变换 C++实现 java实现 leetcode系列(六)

    Z 字形变换  java实现 C++实现  将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 ...

  5. java z+_Java Z 字形变换

    – 题目:Z 字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: ...

  6. 【LeetCode】6.Z 字形变换

    6.Z 字形变换 我的思路貌似没有第二家,不过我懒得解释了. #include <string> #include <iostream> using namespace std ...

  7. leetcode题库:6. Z字形变换

    题目: /**题目:6. Z字形变换(题目地址:https://leetcode-cn.com/problems/zigzag-conversion/description/)  * 将字符串 &qu ...

  8. [模拟|字符串] leetcode 6 Z字形变换

    [模拟|字符串] leetcode 6 Z字形变换 1.题目 题目链接 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHI ...

  9. leetcode第六题Z字形变换心得记录

    算法学习之路-坚持走下去 Z字形变换 题目描述 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行 ...

  10. LeetCode——6. Z 字形变换

    6. Z 字形变换(中等难度) 题目描述: 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "PAYPALISHIRING ...

最新文章

  1. 第四章:通过:driver.getAttribute(value); 获取value的值
  2. P3389 【模板】高斯消元法
  3. react中的状态机_在基于状态图的状态机上使用React的模式
  4. 【转】04.Dicom 学习笔记-DICOM C-Move 消息服务
  5. MySQL04WHERE关键字
  6. Node.js入门以及第一个helloworld程序.
  7. bat 取得服务列表_临汾进出口经营者备案,查看详情_共勤外贸服务
  8. Python使用freetype渲染显示阿拉伯语
  9. Maven异常:Could not find artifact
  10. rabbitmq高并发RPC调用,你Get到了吗?
  11. script什么意思中文翻译成,script的中文意思是什么
  12. maven - filtering标签
  13. 统计年鉴 excel
  14. 端云协同,打造更易用的AI计算平台
  15. EVE在Win10上安装
  16. 北邮计算机学院acm,计算机学院学生在2018年ACM-ICPC中国大学生程序设计竞赛中喜获佳绩...
  17. python中 “按位与,或,异或”与C语言的不同
  18. ZigBee无线温度传感网络设计
  19. win10计算机管理器在哪,Windows10开启服务管理器图文教程|Win10系统服务管理器在哪...
  20. 无法打开此计算机的组策略,无法运行gpedit.msc(组策略)的解决

热门文章

  1. bzero和sigevent
  2. 电气AutoCAD基础教学(三)——块的绘制
  3. Hello Python(十八)——PyInstaller打包发布
  4. redis 常用命令
  5. 2020-04-12
  6. mysql -关联查询与分组查询
  7. 【Python】大数相乘
  8. c语言复制粘贴快捷键_大家还知道哪些快捷键方法?如:ctrl+c复制,ctrl+v粘贴
  9. 51单片机 74HC595应用实例+Proteus仿真
  10. 为什么要用CAT工具辅助翻译?为什么要用翻译管理系统?以memoQ为例