文档章节

将字符串转化成ZigZag模式

指尖跳动的精灵
 指尖跳动的精灵
发布于 2015/04/11 23:20
字数 494
阅读 1348
收藏 2

背景:

原问题出处:https://leetcode.com/problems/zigzag-conversion/

就是将一个字符串按ZigZag格式进行转换,并返回。例如字符串"ABCDEFGHIJK"

转换后(3行):

A E I
BDFHJ
C G K

  然后按行打印:AEIBDFHJCGK

如果按4行转换:

A  G
B FH
CE IK
D  J

打印:AGBFHCEIKDJ

思路:

其实这道题像是找规律题。当转换为3行时,我们可以以4为单位(4=(3-1)*2.也就是等于(行数-1)*2),将字符串分割(以ABCDEFGHIJK为例):

ABCD     EFGH   IJK

那么经过转换后打印的第0行,其实是分割后每一个数组的第0个元素:A E I 。对应到原字符串中就是第0个、第4个、第8.

所以规律为 0,4,8,...4*n..

那么经过转换后打印的第2行(最后一行):打印后的每个元素为:C G K.其实是分割后的每个数组的第二个元素(下标从0可开始) 。对应到原始字符串就是:2 ,2+4,2+4*2,..2+4*n..

从上面可以看出,第一行和最后一行的规律为(设行数为i,从0开始):i+4*n(n=0,1,2...)

其他行:

还是上面的例子,第一行输出为:B D F H J.每一个元素都是分割后的数组中的第1个和第-1个元素。对应到原字符串中为:

1,4-1,4+1,4*2-1,4*2+1...

因此规律为(设i为行数):4*n+i,4*n-i。

代码:

我的代码写的不简单,而且耗时大概110ms,也没有下面的这位朋友的代码耗时少(107ms),所以推荐该朋友的代码:

源代码出处:https://leetcode.com/discuss/11948/my-python-solution

class Solution:
    # @return a string
    def convert(self, s, nRows):
        if nRows == 1:            return s
        D = 2*nRows -2
        L = len(s)
        R = ''
        for i in range(0, nRows):
            MD = 2*nRows - 2 - 2*i
            t = i            while t < L:
                R += s[t]                if i != 0 and i!= nRows-1 and t+MD < L:
                    R += s[t+MD]
                t += D        return R


© 著作权归作者所有

共有 人打赏支持
指尖跳动的精灵
粉丝 15
博文 90
码字总数 48459
作品 0
海淀
私信 提问
LeetCode - ZigZagConversion

以下题干翻译自LeetCode,原文题目请参见LeetCode网址: ZigZagConversion 有一个字符串,当使用ZigZag模式写,并且指定了对应的行数时,如下所示(最好设置一个定长的字体来看): 然后我们要将...

Mock2052
2017/11/21
0
0
Leetcode_6. Zigzag convertion

6. Zigzag convertion 对输入的字符串做锯齿形变换,并输出新的字符串,所谓zigzag变化如下图所示。 将"ABCDEFGHIJKL"做4行的锯齿变换,新的字符串为:AGBFHLCEIKDJ" 实现一个根据输入字符串...

gexin1023
06/28
0
0
freemarker 工作小计

一 date格式化 1.模板中传入date类型的格式化 2.模板中传入long类型的时间戳 ?c 用于将数字转换为字符串 ?number 字符串转化为数字格式 ?numbertodatetime 将数字转化成时间, 它们被用来转换...

Zzzz_WP
07/09
0
0
编码原理(七) --回顾

1 DCT变换 经过DCT变换,实现了频率的集中。 2量化 经过量化,我们对DCT变换后的系数进行以QP=28的量化,此时得到了一些左上角集中了非零值的系数矩阵。 3 ZigZag扫描 ZigZag扫描,将二维的系...

mmlf
02/07
0
0
json对象和json字符串的转化

代码如下:JSON.parse(jsonstr); //可以将json字符串转换成json对象JSON.stringify(jsonobj); //可以将json对象转换成json对符串 注:ie8(兼容模式),ie7和ie6没有JSON对象,需要引入 json.js ...

卯金刀GG
2016/09/22
11
0

没有更多内容

加载失败,请刷新页面

加载更多

2018最新Web前端经典面试试题及答案

javascript: JavaScript中如何检测一个变量是一个String类型?请写出函数实现 typeof(obj) === "string" typeof obj === "string" obj.constructor === String 请用js去除字符串空格? 方法一...

Jack088
17分钟前
6
0
大数据教程(10.1)倒排索引建立

前面博主介绍了sql中join功能的大数据实现,本节将继续为小伙伴们分享倒排索引的建立。 一、需求 在很多项目中,我们需要对我们的文档建立索引(如:论坛帖子);我们需要记录某个词在各个文...

em_aaron
22分钟前
1
0
"errcode": 41001, "errmsg": "access_token missing hint: [w.ILza05728877!]"

Postman获取微信小程序码的时候报错, errcode: 41001, errmsg: access_token missing hint 查看小程序开发api指南,原来access_token是直接当作parameter的(写在url之后),scene参数一定要...

两广总督bogang
23分钟前
6
0
MYSQL索引

索引的作用 索引类似书籍目录,查找数据,先查找目录,定位页码 性能影响 索引能大大减少查询数据时需要扫描的数据量,提高查询速度, 避免排序和使用临时表 将随机I/O变顺序I/O 降低写速度,占用磁...

关元
41分钟前
7
0
撬动世界的支点——《引爆点》读书笔记2900字优秀范文

撬动世界的支点——《引爆点》读书笔记2900字优秀范文: 作者:挽弓如月。因为加入火种协会的读书活动,最近我连续阅读了两本论述流行的大作,格拉德威尔的《引爆点》和乔纳伯杰的《疯传》。...

原创小博客
53分钟前
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部