首页 > 其他 > 详细

leetcode 6 -- ZigZag Conversion

时间:2015-05-25 14:39:47      阅读:272      评论:0      收藏:0      [点我收藏+]

ZigZag Conversion

题目:
The string “PAYPALISHIRING” is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)

P A H N
A P L S I I G
Y I R
And then read line by line: “PAHNAPLSIIGYIR”
Write the code that will take a string and make this conversion given a number of rows:

string convert(string text, int nRows);
convert(“PAYPALISHIRING”, 3) should return “PAHNAPLSIIGYIR”.


题意:
给出一个字符串,然后把字符串转换称N字形状连接,如下图形状,然后一行一行输出字母即可。

技术分享

输出:1,7,13,2,6,8,12,14,3,5,9,11,15,17,4,10,16


思路:
把上图想象成下图
技术分享
首先按照块来区分,途中分了3块,题目中给定参数numRows,那么没块的大小为numRows+numRows-2 = numRows*2-2,先分好块后,我们会发现,每块的第二竖列相对于第一竖列是逆序的,那么我们就分块后在把它逆序,逆序后我是让它居中对齐且补充空格,这样就成为了一个二维矩阵如下图
技术分享
然后按行输出即可,遇到空格不输出。
题目要求是返回一个字符串。


代码:

#!usr/bin/env python
#coding:UTF-8

List = []
NewList = []

def func(str, numRows):
    size = numRows*2-2
    if size == 0:
        return size
    if len(str)%size == 0:
        g = len(str)/size
    else:
        g = len(str)/size+1
        str += (size-len(str)%size)*‘ ‘
    for i in range(g):
        List.append(str[size*i:size*i+size])

    for s in List:
        print s
        l1 = list(s[:numRows])
        l2 = list(s[size:size/2:-1].center(numRows))
        NewList.append(l1)
        NewList.append(l2)
    s = ‘‘
    print NewList
    for i in range(numRows):
        for j in NewList:
            if j[i] != ‘ ‘:
                s += j[i]
    print s



if __name__ == ‘__main__‘:
    func(‘PAYPALISHIRING‘, 3)

运行结果:
技术分享

要注意的一些小细节

leetcode 6 -- ZigZag Conversion

原文:http://blog.csdn.net/wwh578867817/article/details/45968403

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!