LeetCode刷题之6.Z字形变换
我不知道将去向何方,但我已在路上! |
---|
时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 ! |
- 题目:
将一个给定字符串根据给定的行数,以从上往下、从左到右进行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
- 代码:
class Solution:
def convert(self, s: str, numRows: int) -> str:
temp = [''] * numRows
if numRows == 1:
return(s)
i = 0
for letter in s:
if i == 0:
fangxiang = 1
temp[i] = temp[i] + letter
i += fangxiang
if i == numRows - 1:
fangxiang = -1
return(''.join(temp))
# 执行用时 :68 ms, 在所有 Python3 提交中击败了98.21%的用户
# 内存消耗 :13.9 MB, 在所有 Python3 提交中击败了7.85%的用户
- 算法说明:
建立一个空列表temp,长度设置为numRows;如果numRows等于1,直接输出字符串s;用for循环进行遍历,将字符逐个添加到temp对应的行里面,如果是从小到大的方向添加,将标志位fangxiang设置为1,如果是从大到小的方向添加,将标志位fangxiang设置为-1;将s中的字符,按照1、2、3、2、1、2、3、2、1……的顺序进行添加,具体过程如下:按照箭头进行遍历,还有标志位的变化,