题目

直接看图!

思路第一步:分组

  1. 我们把传入的字符串进行分组, 每个框内的字母为1组;
  2. 我们发现每个相同颜色的框内的一组字母的特点是在传入的字符串中是连续的
  3. 我们还发现每组字母的个数是由numRow来确定的;个数为(numRow + numRow - 2);
  4. 所以我们把字符串按照步长切分成一组一组的,然后按照索引去查找;

分组实现过程:

index = 0

lst = []

step = numRow + numRow - 2

while index < len(s):

end = index + step

temp = s[index:end]

lst.append(temp)

这样我们可以得到lst这个列表的每个元素都是一个组:

lst : [‘ABCDEF’, ‘GHIJKM’, ‘NOPQ’]

最后一组只有四个元素,但是不影响,后面我们可以通过异常处理来解决;

思路第二步:按照规则取值

  1. 可以看出来,numRow行的第一行我们只需要取到每组的第一个值就可以了;
  2. 但是如果是numRow行的第2行到num_Row-1行我们每组要取两个数字,分别是第i=1(i从0开始)个和每组字母个数减去i的那一个;在第一组中就是i=1,B和i = 2 * numRow - 2 - i, F 这两个;
  3. 我们还需要考虑最后一组如果用索引去取取不到会报错的情况,我们去捕获异常,如果捕获到了就压制它;

取值实现过程:

    i = 0
while i < numRows: # 取numRow次,每次取1 ~ 2个
for value in lst: # 遍历每组, 每组都取
if 1 <= i <= numRows-2: # 如果索引是1到numRows-2,每组需要取两个
try: # 这里考虑到最后一组可能会出现取不到报 IndexError
final += value[i]
final += value[2*numRows-2-i]
except: # 捕获到就压制他
pass
else:
try: # 同样,取第numRow行的值最后一组也可能取不到
final += value[i]
except: # 压制
pass

两段核心代码如果理解了,再看我的整个程序就会变得异常的舒服!

class Solution:
def convert(self, s: str, numRows: int):
index = 0
step = 2*numRows - 2
lst = []
final = "" # 存放最终要返回的结果
i = 0
while index < len(s): # 核心代码1; 分组
end = index + step
temp = s[index:end]
lst.append(temp)
index = end
print(lst)
while i < numRows: # 核心代码2; 取值
for value in lst:
if 1 <= i <= numRows-2:
try:
final += value[i]
final += value[2*numRows-2-i]
except:
pass
else:
try:
final += value[i]
except:
pass
i += 1
return final
刚刚接触python不久!如果觉得能有所帮助的话,可以关注一下我的csdn博客(csdn博客:叫我明同学),也可以加一下我的python学习交流群:625988679 ;本人最近也是在准备考研,您的关注和支持可以无形之中增加我在复试中的表现,谢谢您!

python经典算法题:Z字变形的更多相关文章

  1. python经典算法题:求字符串中最长的回文子串

    题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: ...

  2. python经典算法题:无重复字符的最长子串

    题目:无重复字符的最长子串. 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子 ...

  3. 经典算法题每日演练——第六题 协同推荐SlopeOne 算法

    原文:经典算法题每日演练--第六题 协同推荐SlopeOne 算法 相信大家对如下的Category都很熟悉,很多网站都有类似如下的功能,“商品推荐”,"猜你喜欢“,在实体店中我们有导购来为 ...

  4. 经典算法题每日演练——第七题 KMP算法

    原文:经典算法题每日演练--第七题 KMP算法 在大学的时候,应该在数据结构里面都看过kmp算法吧,不知道有多少老师对该算法是一笔带过的,至少我们以前是的, 确实kmp算法还是有点饶人的,如果说红黑树 ...

  5. 经典算法题每日演练——第十七题 Dijkstra算法

    原文:经典算法题每日演练--第十七题 Dijkstra算法 或许在生活中,经常会碰到针对某一个问题,在众多的限制条件下,如何去寻找一个最优解?可能大家想到了很多诸如“线性规划”,“动态规划” 这些经典 ...

  6. 经典算法题每日演练——第十六题 Kruskal算法

    原文:经典算法题每日演练--第十六题 Kruskal算法 这篇我们看看第二种生成树的Kruskal算法,这个算法的魅力在于我们可以打一下算法和数据结构的组合拳,很有意思的. 一:思想 若存在M={0, ...

  7. 经典算法题每日演练——第十四题 Prim算法

    原文:经典算法题每日演练--第十四题 Prim算法 图论在数据结构中是非常有趣而复杂的,作为web码农的我,在实际开发中一直没有找到它的使用场景,不像树那样的频繁使用,不过还是准备 仔细的把图论全部过 ...

  8. 经典算法题每日演练——第十一题 Bitmap算法

    原文:经典算法题每日演练--第十一题 Bitmap算法 在所有具有性能优化的数据结构中,我想大家使用最多的就是hash表,是的,在具有定位查找上具有O(1)的常量时间,多么的简洁优美, 但是在特定的场 ...

  9. 经典算法题每日演练——第八题 AC自动机

    原文:经典算法题每日演练--第八题 AC自动机 上一篇我们说了单模式匹配算法KMP,现在我们有需求了,我要检查一篇文章中是否有某些敏感词,这其实就是多模式匹配的问题. 当然你也可以用KMP算法求出,那 ...

随机推荐

  1. JVM垃圾回收(下)

    接着上一篇,介绍完了 JVM 中识别需要回收的垃圾对象之后,这一篇我们来说说 JVM 是如何进行垃圾回收. 首先要在这里介绍一下80/20 法则: 约仅有20%的变因操纵着80%的局面.也就是说:所有 ...

  2. .NET Core开发的iNeuOS物联网平台部署树霉派,从网关到云端整体解决方案。助力2019中国.NET峰会。

    2019 中国.NET 开发者峰会正式启动 目       录 1.      概述... 2 2.      树莓派硬件配置... 2 3.      软件信息... 3 4.      Raspb ...

  3. 渗透测试-基于白名单执行payload--Regsvr32

    复现亮神课程 基于白名单执行payload--Regsvr32 0x01 Regsvr32 Regsvr32命令用于注册COM组件,是 Windows 系统提供的用来向系统注册控件或者卸载控件的命令, ...

  4. Struts2:搭建原理

    记录下,struts2的搭建过程: 1核心jar包: struts-2.1.8\apps\struts2-blank-2.1.8.war 解压后 在struts2-blank-2.1.8\WEB-IN ...

  5. Cocos2d-x 学习笔记(8) ActionManager

    1. 概述 ActionManager管理所有的action,调度所有的action,删除指定的action.每个action对应一个node对象,action存储在actions中,actions和 ...

  6. ArrayList源码解析[一]

    ArrayList源码解析[一] 欢迎转载,转载烦请注明出处,谢谢. https://www.cnblogs.com/sx-wuyj/p/11177257.html 在工作中集合list集合用的相对来 ...

  7. 简单理解TCP通信的三次握手

    TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接. 位码(可以理解为请求状态): 有6种标示:SYN(synchronous建立联机) ACK(acknowledg ...

  8. 05jmeter正则表达式

    1.必须掌握的正则字符 "^" :^会匹配行或者字符串的起始位置,有时还会匹配整个文档的起始位置."$" :$会匹配行或字符串的结尾."\w" ...

  9. 向net core 3.0进击——项目发布与部署

    目录 前言 发布 测试 小结 前言 在经历过好多折腾后,总算是把部署走通了一遍,之前只是简单创建个工程在linux下部署,后来一直将这件事搁置,直到最近刚好团队入手一个小服务器,很显然是linux的, ...

  10. @RequestParam设置默认可以传空值

    设置如下:@RequestParam(value="CbqkJson[]",required=false)String[] CbqkJson required=false 如果不设 ...