码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode 6 -- ZigZag Conversion

时间:2015-05-25 14:42:59      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:算法   leetcode   string   

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

标签:算法   leetcode   string   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!