题目

直接看图!

思路第一步:分组

  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. Zookeeper未授权访问测试

    前言 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提 ...

  2. Redis学习三(进阶功能).

    一.排序 redis 支持对 list,set 和 zset 元素的排序,排序的时间复杂度是 O(N+M*log(M)).(N 是集合大小,M 为返回元素的数量) sort key [BY patte ...

  3. Oracle报错注入总结

    0x00 前言 在oracle注入时候出现了数据库报错信息,可以优先选择报错注入,使用报错的方式将查询数据的结果带出到错误页面中. 使用报错注入需要使用类似 1=[报错语句],1>[报错语句], ...

  4. [BZOJ2392][HAOI2011]Problem c

    Description 给n个人安排座位,先给每个人一个1~n的编号,设第i个人的编号为ai(不同人的编号可以相同),接着从第一个人开始,大家依次入座,第i个人来了以后尝试坐到ai,如果ai被占据了, ...

  5. 浑身尖刺的服务可用性守护者——hystrix熔断器实践记录

    netflix公司的产品hystrix(长满刺的豪猪),在高可用目标下具有一定熔断.限流.降级的作用.这里主要写一些自己在使用时的问题解决思路,原理请自行理解,包括线程池与信号量模式等. 注意三个参数 ...

  6. LInux下npm install 安装失败问题

    现象: 今天公司自己动部署的Jenkins出现了问题,在执行npm install的时候,失败了,下载不到npm,在查阅了各种报错信息之后还是没有解决,发现用淘宝镜像进行安装时,也会有安装不成功的情况 ...

  7. 10.Nginx流行架构LNMP

    1.什么是LNMP架构 LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写.L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以 ...

  8. spark cdh5编译安装[spark-1.0.2 hadoop2.3.0 cdh5.1.0]

    前提你得安装有Hadoop 我的版本hadoop2.3-cdh5.1.0 1.下载maven包 2.配置M2_HOME环境变量,配置maven 的bin目录到path路径 3.export MAVEN ...

  9. CheckBox多选

    前台: <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> & ...

  10. rabbitmq学习-如何安装rabbitmq

    学习当然还是需要看官网地址的哈 官网地址 你可能会说老铁,看不懂英文咋办?我只能说各大翻译软件以及广大网友总有一款是你喜欢的 广大网友翻译的 中文文档 什么是rabbitmq? rabbitmq (R ...