ZigZag Conversion

6 . ZigZag Conversion

原题地址:LeetCode ZigZag

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)

图片实例

And then read line by line: [“PAHNAPLSIIGYIR”][6]
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)][6] should return [“PAHNAPLSIIGYIR”][6].


解题思路:

ZigZag Conversion_第1张图片

代码(Python):

class Solution(object):
    def convert(self, s, numRows):
        # 若只有一行,则直接返回原字符即可
        if numRows == 1: return s
        # lens为字符串长度
        lens = len(s)
        # 生成一个含有numRows个空字符串的list
        res = ['' for i in range(numRows)]
        # index用于指向当前字符应存入哪个字符串
        index = -1
        # step用于改变index的值
        step = 1
        # 循环字符串中的所有字符
        for i in range(lens):
            index += step
            # 如果当前index超过了list的大小时,将index - 2, 同时step职位-1
            if index == numRows:
                index -= 2
                step = -1
                # 如果当前index小于了list的大小时,将index置为1, 同时step置为1
            if index == -1:
                step = 1
                index = 1
            # 将字符与list中的index指向的字符串链接
            res[index] += s[i]
        # 通过join连接符,将list中的字符串连接并返回一个字符串
        return ''.join(res)

你可能感兴趣的:(leetcode,string,Python,算法题,LeetCode)