本文主要是介绍13.Z字形变换-Leetcode 006(python),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- 题目描述
将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数:
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"
解释:
P I N
A L S I G
Y A H R
P I
- 解决方案
创建转换后的二维数组,依次遍历字符串中的每一个字符,按照Z字形变换的规则,把字符按列存放进数组中,放完之后,按照行优先的顺序,再把字符从二维数组中依次取出组合成字符串输出。
因为二维数组的创建方式本质上是创建了多个list,每个list对应一行,所以在遍历字符的同时设置标志位dire,控制字符往数组中放的时候,行的方向是从上往下还是从下往上。
另外需要注意如果行数为1的话,那么直接返回字符串本身,否则会报错。
- 代码
class Solution:def convert(self, s, numRows):""":type s: str:type numRows: int:rtype: str"""#先排除只有一行的情况if numRows == 1:return s#定义一个numRows行的二维数组a,每一行都是一个lista = [[] for i in range(numRows)]#当前的行号col = 0#控制行前进的方向是向上还是向下dire = 1#遍历字符串中的每一个字符for c in s:a[col].append(c)#如果走到了最后一行,就把行前进方向变为向上if col == numRows -1:dire = -1#行前进方向为向下elif col == 0:dire = 1col += direstr = ""for row in a:for m in row:str += mreturn str
这篇关于13.Z字形变换-Leetcode 006(python)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!