python经典算法题:Z字变形
题目
直接看图!
思路第一步:分组
- 我们把传入的字符串进行分组, 每个框内的字母为1组;
- 我们发现每个相同颜色的框内的一组字母的特点是在传入的字符串中是连续的;
- 我们还发现每组字母的个数是由numRow来确定的;个数为(numRow + numRow - 2);
- 所以我们把字符串按照步长切分成一组一组的,然后按照索引去查找;
分组实现过程:
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’]
最后一组只有四个元素,但是不影响,后面我们可以通过异常处理来解决;
思路第二步:按照规则取值
- 可以看出来,numRow行的第一行我们只需要取到每组的第一个值就可以了;
- 但是如果是numRow行的第2行到num_Row-1行我们每组要取两个数字,分别是第i=1(i从0开始)个和每组字母个数减去i的那一个;在第一组中就是i=1,B和i = 2 * numRow - 2 - i, F 这两个;
- 我们还需要考虑最后一组如果用索引去取取不到会报错的情况,我们去捕获异常,如果捕获到了就压制它;
取值实现过程:
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字变形的更多相关文章
- python经典算法题:求字符串中最长的回文子串
题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: ...
- python经典算法题:无重复字符的最长子串
题目:无重复字符的最长子串. 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子 ...
- 经典算法题每日演练——第六题 协同推荐SlopeOne 算法
原文:经典算法题每日演练--第六题 协同推荐SlopeOne 算法 相信大家对如下的Category都很熟悉,很多网站都有类似如下的功能,“商品推荐”,"猜你喜欢“,在实体店中我们有导购来为 ...
- 经典算法题每日演练——第七题 KMP算法
原文:经典算法题每日演练--第七题 KMP算法 在大学的时候,应该在数据结构里面都看过kmp算法吧,不知道有多少老师对该算法是一笔带过的,至少我们以前是的, 确实kmp算法还是有点饶人的,如果说红黑树 ...
- 经典算法题每日演练——第十七题 Dijkstra算法
原文:经典算法题每日演练--第十七题 Dijkstra算法 或许在生活中,经常会碰到针对某一个问题,在众多的限制条件下,如何去寻找一个最优解?可能大家想到了很多诸如“线性规划”,“动态规划” 这些经典 ...
- 经典算法题每日演练——第十六题 Kruskal算法
原文:经典算法题每日演练--第十六题 Kruskal算法 这篇我们看看第二种生成树的Kruskal算法,这个算法的魅力在于我们可以打一下算法和数据结构的组合拳,很有意思的. 一:思想 若存在M={0, ...
- 经典算法题每日演练——第十四题 Prim算法
原文:经典算法题每日演练--第十四题 Prim算法 图论在数据结构中是非常有趣而复杂的,作为web码农的我,在实际开发中一直没有找到它的使用场景,不像树那样的频繁使用,不过还是准备 仔细的把图论全部过 ...
- 经典算法题每日演练——第十一题 Bitmap算法
原文:经典算法题每日演练--第十一题 Bitmap算法 在所有具有性能优化的数据结构中,我想大家使用最多的就是hash表,是的,在具有定位查找上具有O(1)的常量时间,多么的简洁优美, 但是在特定的场 ...
- 经典算法题每日演练——第八题 AC自动机
原文:经典算法题每日演练--第八题 AC自动机 上一篇我们说了单模式匹配算法KMP,现在我们有需求了,我要检查一篇文章中是否有某些敏感词,这其实就是多模式匹配的问题. 当然你也可以用KMP算法求出,那 ...
随机推荐
- python编程基础之三十五
系统的魔术方法:系统的魔术方法特别多,但是也都特别容易懂,简单的讲就是对系统的内置函数进行重写,你需要什么效果就重写成什么样, 比如说len()方法针对的对象本来没有自定义类的对象,但是当你重写了__ ...
- ConcurrentHashMap实现原理以及源码分析
ConcurrentHashMap是HashMap的高并发版本,是线程安全的,而HashMap是非线程安全的 一.底层实现 底层结构跟hashmap一样,都是通过数组+链表+红黑树实现的,不过它要保证 ...
- numpy.rollaxis函数
numpy.rollaxis numpy.rollaxis 函数向后滚动特定的轴到一个特定位置,格式如下: numpy.rollaxis(arr, axis, start) 参数说明: arr:数组 ...
- django2.0+连接mysql数据库迁移时候报错
django2.0+连接mysql数据库迁移时候报错 情况一 错误信息 django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 ...
- SVN部署(基于Linux)
第一步:通过yum命令安装svnserve,命令如下: yum -y install subversion 此命令会全自动安装svn服务器相关服务和依赖,安装完成会自动停止命令运行 若需查看svn安装 ...
- CSP2019 考前复习
动态规划 [NOIP2016]愤怒的小鸟(状压+思维) 多组数据题 共有i只猪,给出每只猪的坐标,鸟的飞行轨迹为经过原点的抛物线,求最少要多少只鸟能消灭所有的猪 \[ 猪数量n<=18 \] 看 ...
- [BZOJ1076] 奖励关
Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物, 每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的 ...
- 8种常见的SQL错误用法
常见SQL错误用法 1. LIMIT 语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方.比如对于下面简单的语句,一般DBA想到的办法是在type, name, create_time字 ...
- eclipse中最有用的10个快捷键
这里列出一些在使用eclipse的过程中最有用的10个快捷键,通过灵活使用这些快捷键可以提高开发效率和开发质量. 1. [ctrl+shift+r]打开资源 这可能是所有快捷键中最省时间的了.这个快捷 ...
- 利用Veeam保护SAP HANA数据库
利用Veeam保护SAP HANA数据库 前言 针对越来越多的SAP HANA备份需求,我们Team翻译.整理.借鉴了Veeam 的SAP HANA 大神 Clemens Zerbe 和 Ali Sa ...