文档章节

将字符串转化成ZigZag模式

指尖跳动的精灵
 指尖跳动的精灵
发布于 2015/04/11 23:20
字数 494
阅读 1320
收藏 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
编码原理(七) --回顾

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

mmlf
02/07
0
0
架构设计:系统间通信(12)——RPC实例Apache Thrift 中篇

(接上文《架构设计:系统间通信(11)——RPC实例Apache Thrift 上篇》) 3、Aapche Thrift详解 在《架构设计:系统间通信(10)——RPC的基本概念》一文中,我专门介绍了一款RPC规范的具体...

引鸩怼孑
2016/01/29
38
0
freemarker 工作小计

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

Zzzz_WP
07/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java并发备忘

不安全的“先检查后执行”,代码形式如下: if(条件满足){ //这里容易出现线程安全问题//doSomething}else{//doOther} 读取-修改-写入 原子操作:使用CAS技术,即首先从V中读取...

Funcy1122
今天
0
0
SpringBoot2.0 停机

最近新建了个SpringBoot2.0的项目,因为原来一直使用的是传统的Tomcat部署war包的形式,所以这次SpringBoot内置Tomcat部署jar包的时候遇到了很多问题。其中一个就是因为没有外置的Tomcat容器...

Canaan_
昨天
0
1
Confluence 6 外部参考

一个外部参考的意思是任何站点链接到你 Confluence 的实例。任何时候当 Confluence 的用户单击这个外部链接的时候,Confluence 可以记录这次单击为参考。 在默认的情况下,外部链接的参考链接...

honeymose
昨天
0
0
Android中的设计模式之抽象工厂模式

参考 《设计模式解析》 第十一章 Abstract Factory模式 《设计模式:可复用面向对象软件的基础 》3.1 Abstract Factory 抽象工厂 对象创建型模式 《Android源码设计模式解析与实战》第6章 创...

newtrek
昨天
0
0
Redis | 地理空间(GEO)的一个坑

Redis的地理空间(Geo)是个好东西,轻轻松松的就可以把地图描点的问题处理了, 最近却遇到一个坑...Redis采用的Msater-Slave模式, 运用GEORADIUS在salve读取对应的数据,新增了从节点但是从不返...

云迹
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部