题目:

将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数:

P   A   H   N
A P L S I I G
Y   I   R之后从左到右"PAHNAPLSIIGYIR"
实现一个将字符串进行指定行数变换的函数。

思路:

1. 官方答案版本1


以上面这个例子解释:
遍历原始字符串,用currow变量记录所处的行,即让currow变换为0,1,2,1,0,1,2,1,0,1,2,1,0,1......
(如果numRows是4行currow就是0,1,2,3,2,1,0,1,2,3,2,1...... )
同时初始化一个长度为3,元素为字符串的列表rows。
每到currow行,就把遍历到的字符s加入到rows相应元素,
如第0行,rows[0]+=s,第1行,rows[1]+=s ...... 最后再把rows按顺序输出就好了。

如何让currow按需变换,需要再有个变量godown 记录方向,到0或numRows-1 行的时候,godown变向,决定currow加一或者减一。
需要注意
①原字符串长度可能小于numRows,所以列表长度为min(numRows, len(s))   
②遇到numRows = 1,直接return s。

class Solution:def convert(self, s, numRows):""":type s: str:type numRows: int:rtype: str"""if numRows == 1:return srows = ['']* min(numRows, len(s))godown = Falsecurrow = 0for c in s:rows[currow] += cif currow == 0 or currow == numRows-1:godown = not godownif godown:currow += 1else:currow -= 1return ''.join(rows)

2. 官方答案版本2

主要是找出数字索引与行列数的关系。

0   4   8   12
1 3 5 7 9 11 13
2   6   10    

numRows有3行,完全有数字的列,间隔interval=4,(4=2*3-2)
    第0行:0,4,8,12...... (从0开始间隔4)
    第numRows-1行:2,6,10...... (从numRows-1开始间隔4)
    第1行:1,5,9,13... 也是间隔4,然后3比1大2, 7比5大2,11比9大2... (行内间隔innergap=2)

0     6     12
1   5 7   11 13
2 4   8 10    
3     9      

numRows=4,interval=2*4-2=6。第0行和最后一行规律同上。
    主要看innergap的规律,5---1,2---4的和都是6(interval),我们想求的是5减1,4减2,即innergap = interval - 2*i(i是行序号)
    这个方法好像比上一个慢,不知道是不是对字符串s的访问太跳跃的原因>.<

class Solution:def convert(self, s, numRows):""":type s: str:type numRows: int:rtype: str"""if numRows == 1:return sans = ''interval = 2*numRows -2ans += s[::interval]    #第0行,第一个例子里的0,4,8for i in range(1, numRows-1):    #第1到倒数第2行innergap = interval - 2*ifor j in range(i, len(s),interval):ans += s[j]                #例子里的1,5,9if j + innergap < len(s):    #注意越界ans += s[j+innergap]    #例子里的3,7ans += s[numRows-1::interval]    #最后1行,例子里的2,6return ans

发现, i、j循环里,j+innergap每次都要判断越界,稍微改进直到一行最后才判断,会变快^0^

        for i in range(1, numRows-1):    #第1---倒数第2行innergap = interval - 2*ij = iwhile j<len(s)-interval:ans +=(s[j]+s[j+innergap])    #while循环里先把1、3、5、7放进去j += intervalif j < len(s):        #然后判断9是否越界ans += s[j]if j+innergap < len(s):    #再判断11是否越界ans += s[j+innergap]

leetcode6 Z字形变换 python相关推荐

  1. leetcode6. Z 字形变换

    将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L   C   I   ...

  2. LeeTCode:6. Z 字形变换 python实现

    将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: 方法一: 为一个 类似 ...

  3. LeetCode Algorithm 6. Z 字形变换

    6. Z 字形变换 Ideas 这题的思路其实只要想到了就很简单,首先创建一个numRows行的矩阵,每一行用来存Z字变换后每一行的字符,然后遍历字符串s,其实就是从上往下然后从下往上填充到每一行,所 ...

  4. leetcode题库:6. Z字形变换

    题目: /**题目:6. Z字形变换(题目地址:https://leetcode-cn.com/problems/zigzag-conversion/description/)  * 将字符串 &qu ...

  5. Z 字形变换 C++实现 java实现 leetcode系列(六)

    Z 字形变换  java实现 C++实现  将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 ...

  6. java z+_Java Z 字形变换

    – 题目:Z 字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: ...

  7. 【LeetCode】6.Z 字形变换

    6.Z 字形变换 我的思路貌似没有第二家,不过我懒得解释了. #include <string> #include <iostream> using namespace std ...

  8. [模拟|字符串] leetcode 6 Z字形变换

    [模拟|字符串] leetcode 6 Z字形变换 1.题目 题目链接 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHI ...

  9. leetcode第六题Z字形变换心得记录

    算法学习之路-坚持走下去 Z字形变换 题目描述 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行 ...

最新文章

  1. c语言大项目经验,C语言该学的地方(项目经验)
  2. 微信小程序多张图片和表单一起上传,验证表单及进度条的实现完整代码
  3. SQL Server占用服务器内存过高
  4. linux压缩和解压缩命令大全
  5. O(n* (logn)^2 )的Shell排序——转自Matrix67的博客
  6. 网站性能Web压力测试工具webbench
  7. matlab修改图片位深度_如何利用matlab统一处理照片亮度对比度
  8. Python常用运算符含义与用法演示
  9. python学习笔记(11)--测验3: Python基础语法(下) (第7周)
  10. mysql 并发_MySQL的并发控制与加锁分析
  11. JDBC——连接数据库
  12. 人工智能写作:想要和智能对话 本AI给你的写作指个路
  13. 天思ERP软件常见问题解决方案
  14. 个性化制作nodemcu-firmware(esp8266/esp8285 固件制作)----包含lua程序bin的制作
  15. 常见随机变量的数学期望和方差
  16. 教你如何快速下载网站?如何仿制网址,下载网站,获取网站html文件,图像文件
  17. 手机测试wifi的延迟的软件,六款最佳、免费的网络延迟测试工具
  18. 云游戏拉开产业化大幕
  19. Android拍照识别身份证SDK
  20. 大型软件设计——进度报告

热门文章

  1. 衡师11月月赛web题目wp
  2. 商标注册的材料和流程有哪些
  3. DotNetBar的groupPanel和buttonX背景色问题
  4. 数据结构之逻辑结构与存储结构
  5. 聚合支付、单商户多商户支付、微信/支付宝/PayPal支付流程、支付政策法规
  6. .net core 使用HttpClient为企业微信上传临时素材
  7. php 获取未编译的数据,PHP 无数据库读写配置文件 | 孟坤博客
  8. 日常学习的免费网站(学习必备)
  9. Simscape multibody 移动关节
  10. C++加法运算符重载