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

P   A   H   N
A P L S I I G
Y I R

之后从左往右,逐行读取字符:"PAHNAPLSIIGYIR"

实现一个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

示例 1:

输入: s = "PAYPALISHIRING", numRows = 3
输出: "PAHNAPLSIIGYIR"

示例 2:

输入: s = "PAYPALISHIRING", numRows = 4
输出: "PINALSIGYAHRPI"
解释: P I N
A L S I G
Y A H R
P I
leetcode上的一道题,一开始看到这个题目,很耿直的就直接做了:  很好的对应刘每一个空格。。
def convert(s,num):
chushu=num*2-2
base=1+num-2
if chushu==0:
return s
yushu=len(s)%chushu
if yushu==0:
lieshu = len(s) / chushu * base
elif yushu<=num:
lieshu=len(s)/chushu*base+1
elif yushu> num:
lieshu = len(s) / chushu * base + yushu-num+1
newdata=[['' for j in range(num)] for i in range(lieshu)]
k=0
for i in range(lieshu):
for j in range(num):
if k<len(s):
if i%(num-1)==0 or (i+j)%(num-1)==0:
newdata[i][j]=s[k]
k+=1
# print newdata
a=[]
for j in range(num):
a.extend([i[j] for i in newdata if i[j]!=''])
return ''.join(a)
if __name__ == '__main__':
s='PAYPALISHIRING'
res= convert(s,4)
print res

结果是:

[['P', 'A', 'Y', 'P'], ['', '', 'A', ''], ['', 'L', '', ''], ['I', 'S', 'H', 'I'], ['', '', 'R', ''], ['', 'I', '', ''], ['N', 'G', '', '']]
PINALSIGYAHRPI

当然对是没问题的,就是效率比较低。

这道题有个技巧就是不需要管空格,因为他是按行打印的,P I N,无论你中间隔多少,都是这几个字母,然后再搞清楚他的排列方式,一会向下一会向上的。

def convert3(s,num):
chushu = num * 2 - 2
base = 1 + num - 2
if chushu == 0:
return s
newdata=[[] for i in range(num)]
c=0
direc=1 #方向
for i in s:
newdata[c].append(i)
if c>=num-1:
direc=-1
elif direc==-1 and c==0:
direc=1
c+=direc
print newdata
return ''.join([''.join(i) for i in newdata])
if __name__ == '__main__':
s='PAYPALISHIRING'
res= convert3(s,4)
print res

结果是:

[['P', 'I', 'N'], ['A', 'L', 'S', 'I', 'G'], ['Y', 'A', 'H', 'R'], ['P', 'I']]
PINALSIGYAHRPI

Z字形变换的更多相关文章

  1. C#版[击败100.00%的提交] - Leetcode 6. Z字形变换 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...

  2. Leetcode题库——6.Z字形变换

    @author: ZZQ @software: PyCharm @file: convert.py @time: 2018/9/20 20:12 要求: Z字形变换 将字符串 "PAYPAL ...

  3. LeetCode Golang 6. Z 字形变换

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

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

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

  5. Leetcode(6)Z字形变换

    Leetcode(6)Z字形变换 [题目表述]: 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" ...

  6. Java实现 LeetCode 6 Z字形变换

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

  7. leetcode刷题六<z字形变换>

    将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 时,排列如下: L C I R E T O E S I I G E D H N 之后,你的输出需要从左往右逐 ...

  8. [Swift]LeetCode6. Z字形变换 | ZigZag Conversion

    The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...

  9. [LeetCode] 6. Z 字形变换

    题目链接:(https://leetcode-cn.com/problems/zigzag-conversion/) 题目描述: 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列 ...

  10. Z 字形变换

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

随机推荐

  1. MySQL服务器最大连接数的合理设置

    MySQL服务器的连接数并不是要达到最大的100%为好,还是要具体问题具体分析,下面就对MySQL服务器最大连接数的合理设置进行了详尽的分析,供您参考. 我们经常会遇见“MySQL: ERROR 10 ...

  2. 高阶函数map(),filter(),reduce()

    接受函数作为参数,或者把函数作为结果返回的函数是高阶函数,官方叫做 Higher-order functions. map()和filter()是内置函数.在python3中,reduce()已不再是 ...

  3. WEB入门之十一 JS面向对象

    学习内容 JavaScript类的定义模式 JavaScript继承的实现 JavaScript抽象类 JavaScript解析XML 能力目标 深入了解JavaScript类的定义模式 理解Java ...

  4. GDKOI2018发烧记

    偏远小渔村NOIP螺旋升天选手又一次来到了广州参加GDKOI...金实的初三爷们也来啦?要被碾啦T T Day 0 跟HR Lao爷拼(biao)车到了高铁站,上了高铁居然没有颓颓颓吃吃吃(雾),安心 ...

  5. POJ 2235 Frogger / UVA 534 Frogger /ZOJ 1942 Frogger(图论,最短路径)

    POJ 2235 Frogger / UVA 534 Frogger /ZOJ 1942 Frogger(图论,最短路径) Description Freddy Frog is sitting on ...

  6. c++并发编程之创建线程

    以boost为例.boost::thread有两个构造函数: (1)thread():构造一个表示当前执行线程的线程对象: (2)explicit thread(const boost::functi ...

  7. ssm controller层 junit单元测试

    原文链接:https://www.cnblogs.com/oucbl/p/5943743.html springmvc controller junit 测试 作者:blouc@qq.com本文为作者 ...

  8. python---django初步了解以及安装(包括Django网页首次无法访问的原因及解决方法,以及在linux服务器上布置无法启动的原因)

    pip install Django 相关网站资源: Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多成功的网站和APP都基于Django. Django是 ...

  9. LaTeX字体设置

    % 导言区 % 帮助文档 texdoc lshort-zh % 设置normalsize大小 \documentclass[10pt]{ctexart} %article,ctexbook封面, ct ...

  10. Java SSM框架之MyBatis3(五)MyBatis之ResultMap详解

    resultMap是Mybatis最强大的元素,它可以将查询到的复杂数据(比如查询到几个表中数据)映射到一个结果集当中. resultMap包含的元素: <!--column不做限制,可以为任意 ...