LeetCode.6 ZigZag Conversion

又到了每天一道编程题时刻,今天小天为大家带来一道有趣的字符串转化题。

题目简介:

给定一个字符串,将其转换为z字形,并按行输出。举例:

字符串:"PAYPALISHIRING",行数为3,将其折叠成一下形状。

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

最终按行输出即"PAHNAPLSIIGYIR"。

解答:

实际上问题可以解释为,将每个输入字符分配给各个行。找一下规律,从左到右,字符串可以标记上序号01 \cdots nn-1\cdots 01\cdots,也就是每个字符所属的行号。代码的实现如下:

class Solution:
    def convert(self, s, numRows):
        """
        :type s: str
        :type numRows: int
        :rtype: str
        """
        if numRows == 1:
            return s
        j, f = 0, 1
        seqs = ['' for i in range(numRows)]
        for i in s:
            seqs[j] = seqs[j] + i
            j += f
            if j == numRows - 1 or j == 0:
                f *= -1
        return ''.join(seqs)        

程序的复杂度为O(n)

总结:

说来惭愧,这道题实际有两种解法,小天只想到第一种。另一种为找到每行字符在原字符中的位置,实为直接找规律。这倒有点小学奥数题的味道在里面,有兴趣的同学可以试试。

猜你喜欢

转载自blog.csdn.net/qq_30818049/article/details/82954492