z_convert.py 1.12 KB
Newer Older
ligang committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
#!/usr/bin/env python
# -*-coding:utf-8 -*-
#将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列
#第一行与最后一行的步长一样,所以分三步,第一行先根据步长计 算出来,
# 最后一行根据步长计算出来,中间的一行或二行分开计算
#最后把行数连接起来
class Solution:
    def convert(self,s,nums):
        if nums == 1:
            return s
        #步长
        steps = nums * 2 - 2
        an =''
        an += s[0::steps]#第一行
        for i in range(1,nums-1):
            interstep = steps - 2*i#中间行步长
            j = i
            while j < len(s) - steps:
                an += s[j] + s[j+interstep]
                j += steps
            if j < len(s):#补充中间行的倒数第二个元素
               an +=s[j]
            if j+interstep < len(s):
                an += s[j+interstep]#补充中间行的倒数第一个元素

        an += s[nums-1::steps]#最后一行
        return an

str = "LEETCODEISHIRING"
numRows = 3
str = "LEETCODEISHIRING"
numRows = 4
s = Solution()
v = s.convert(str,numRows)
print(v)