我是靠谱客的博主 妩媚大侠,最近开发中收集的这篇文章主要介绍力扣:Z字形变换(python)题目:思路:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目:

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

比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:

P A H N
A P L S I I G
Y I R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zigzag-conversion

思路:

使用元组存储非空的行、列。使用字典存储字符和对应的行、列。
遍历字符串,利用元组记录每个字符应该存入的行、列值—>(行,列)。并利用字典存储该行、列处应该存储的字符—>{(行,列),‘字符’}。最后遍历字典,将字符连接成字符串输出。

class Solution:
def convert(self, s: str, numRows: int) -> str:
if numRows < 2:
return s
global i
i = 0
global column
column = 0
row = -1
global resultMatrix
resultMatrix = {}
resultStr = ''
while i < len(s):
while row < numRows-1:
if i >= len(s):
break
else:
row += 1
coordinate = (row, column)
dict2 = {coordinate: s[i]}
# 临时存储当前字符以及行列值的字典
resultMatrix.update(dict2)
# 为结果字典添加新的键值对
i += 1
del coordinate
# 元组的值不可变,因此每次需要删除元组
while row > 0:
if i >= len(s):
break
else:
column += 1
row -= 1
coordinate = (row, column)
dict2 = {coordinate: s[i]}
resultMatrix.update(dict2)
i += 1
del coordinate
k=0
j=0
while k < numRows:
# 遍历结果字典,取出字符连接成字符串
while j < column+1:
if (k, j) in resultMatrix:
resultStr += resultMatrix[(k, j)]
j += 1
k += 1
j=0
return resultStr

我的方法在内存和时间上都不占优势,看了官方的答案以后,感觉自己写的什么玩意。不过还是记录一下,毕竟也花了时间。官方利用min(numRows,len(s))个列表存储矩阵中的非空位置,其次使用当前行 row 和当前方向 goingDown两个变量指示目前在列表中的位置。也就是说,用了这么多个列表代表行,最后输出的时候把列表首尾相连,拼接起来就行。

最后

以上就是妩媚大侠为你收集整理的力扣:Z字形变换(python)题目:思路:的全部内容,希望文章能够帮你解决力扣:Z字形变换(python)题目:思路:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(30)

评论列表共有 0 条评论

立即
投稿
返回
顶部