一、题目

将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:L   C   I   R
E T O E S I I G
E   D   H   N
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zigzag-conversion
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、语言

python

三、解题思路

1. 第一次见到此题,突然感觉有点懵,不知道如何下手,我就先想办法从上到下列举结果,然后把这些元素放到一个列表里,用元组或者列表装好,如下:

a = [["L", 'E', 'E'], ['', 'T', ''], ['C', 'O', 'D'], ['', 'E', ""]]

列着列着发现了新天地,发现:
     1) 不管是三行还是四行,都可以看做一个矩阵,矩阵可以看作成列表里包含了小列表,为空的元素用空字符串代替。

     2) 包含空字符串的列数row与numRows有关, 且row=numRows-2。

     3) 且单个字符所在的位置有一定的规律,从numRows-1到2位置。

     4) 最后得到的元组列表,然后直接按照位置遍历,遍历完每个元组的第一个元素后,再遍历第二个....最后拼接起来即可。

四、完整代码

"""
将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:L   C   I   R
E T O E S I I G
E   D   H   N
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zigzag-conversion
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
"""str_input = "LEETCODEISHIRING"def set_empty_string(a, num):for k in range(0, num):a[k] = ""return adef convert(s, numRows):target = list()count = 0son = []for i in range(0, numRows):son.append("")for i in s:if count < numRows:son[count] = icount = count + 1elif count == numRows:print("列表:", tuple(son), "中间元素:", i)target.append(tuple(son))son = set_empty_string(son, numRows)# 添加中间元素for j in range(numRows, 2, -1):print("j", j)# 因为空的那个总是从numRows-1的位置开始的,对应列表的下标为numRows-2son[j - 2] = itarget.append(tuple(son))son = set_empty_string(son, numRows)count = 0print("target", target)# 遍历结果,逐行遍历result = []for i in range(0, numRows):for j in target:if j[i] != "":result.append(j[i])return resulttarget = convert(str_input, 3)
target = "".join(target)
print("得到的字符串为:", target)

输入3时,打印结果:

D:\pythonWorkspace\leet-code-study\venv\Scripts\python.exe D:/pythonWorkspace/leet-code-study/day02.py
列表: ('L', 'E', 'E') 中间元素: T
j 3
列表: ('C', 'O', 'D') 中间元素: E
j 3
列表: ('I', 'S', 'H') 中间元素: I
j 3
列表: ('R', 'I', 'N') 中间元素: G
j 3
target [('L', 'E', 'E'), ('', 'T', ''), ('C', 'O', 'D'), ('', 'E', ''), ('I', 'S', 'H'), ('', 'I', ''), ('R', 'I', 'N'), ('', 'G', '')]
得到的字符串为: LCIRETOESIIGEDHNProcess finished with exit code 0

输入4时,打印结果:

D:\pythonWorkspace\leet-code-study\venv\Scripts\python.exe D:/pythonWorkspace/leet-code-study/day02.py
列表: ('L', 'E', 'E', 'T') 中间元素: C
j 4
j 3
列表: ('O', 'D', 'E', 'I') 中间元素: S
j 4
j 3
列表: ('H', 'I', 'R', 'I') 中间元素: N
j 4
j 3
target [('L', 'E', 'E', 'T'), ('', '', 'C', ''), ('', 'C', '', ''), ('O', 'D', 'E', 'I'), ('', '', 'S', ''), ('', 'S', '', ''), ('H', 'I', 'R', 'I'), ('', '', 'N', ''), ('', 'N', '', '')]
得到的字符串为: LOHECDSINECESRNTIIProcess finished with exit code 0

leet-code Z 字形变换详解相关推荐

  1. LeetCode Algorithm 6. Z 字形变换

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

  2. 法线变换详解 和 3D 变换中法向量变换矩阵的推导

    两篇文章 法线变换详解(Normal Transform) 在图形学中,同样的一个模型视图变换矩阵可以用来变换点.线.多边形以及其它几何体,也可以变换多边形表面的切向量.比如: posEyeSpace ...

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

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

  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. OpenCV-Python击中击不中HITMISS形态变换详解

    ☞ ░ 前往老猿Python博客 https://blog.csdn.net/LaoYuanPython ░ 一.引言 从学习完黑帽变换后的这段时间,都在学习和钻研基本形态变换的最后一个变换–击中击不 ...

最新文章

  1. python数组文件_python数组
  2. PHP读取远程文件并保存
  3. python操作php文件,python怎么操作文件
  4. 【BZOJ 3098】 Hash Killer II
  5. 怎么清理句柄_JAR文件句柄:混乱后清理!
  6. c++builder提高批量动态创建panel的速度_骑行时影响速度的事项有哪些 怎样有效提高骑行速度 单车租赁信息...
  7. PyQt5学习笔记02----初探Qt Designer 设计师
  8. PHP SQL查询结果在页面上是乱码
  9. window.load和$(document).ready()事件
  10. 参考 雷霄骅https://blog.csdn.net/leixiaohua1020/article/list/28
  11. Vb自动读取本地HTML,VB读取网页内容 方法汇总 - mystic的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  12. 怎样用计算机10,win10计算器如何使用?win10自带计算器的使用方法
  13. 中兴新支点操作系统_中兴新支点操作系统体验报告:界面简洁、操作简单!
  14. 10 个不错 Web3 设计灵感网站
  15. 使用头文件winbase.h的错误
  16. 智慧城市背景下的“多规合一”标准探究
  17. signature=161034cb9eebb9b66e71be6081528fe7,Alternative Semantics for Verdi
  18. Geek Uninstaller:向流氓软件火力全开,超良心的软件彻底卸载工具
  19. 常用的软件配置管理工具
  20. 如何避免ITSM项目建设失败

热门文章

  1. RSA中 底数m和模数 n 不互素是仍然成立
  2. Linux后台日志定时清理脚本
  3. RecyclerView notifyDataSetChanged 导致图片闪烁的原因
  4. 流放者柯南自建服务器 linux,流放者柯南自建服务器教程一览服务器搭建方法介绍...
  5. python程序设计黄锐军_Python程序设计
  6. 【图像分类】实战——使用ResNet实现猫狗分类(pytorch)
  7. 达克效应:比绝望之谷更可怕的是迟迟未达到愚昧山峰
  8. 微积分同济大学第三版下
  9. C++线程池原理及创建
  10. 使用unity制作的一款生存类游戏demo(一)