Z字形變換(Python,LeetCode)

目錄

題目描述

解決方案

代碼

代碼走讀

傳送門


 

題目描述

將一個給定字符串根據給定的行數,以從上往下、從左到右進行Z字形排列。

比如輸入字符串爲 LEETCODEISHIRING ,行數爲3時,排列如下:

L   C   I   R
E T O E S I I G
E   D   H   N

之後,你的輸出需要從左往右逐行讀取,產生出一個新的字符串:LCIRETOESIIGEDHN

 

解決方案

使用模擬法解決形象生動。

假設行數爲n,我們生成n個列表表示成n行,定義一個指針變量模擬Z字形走向:從第1行依次往下,到達最後一行後在往上走,重複該循環,直到所有元素都被遍歷完。

指針變量每走到一個元素,就將該元素插入到對應行數的列表中。最終將每一行字符連接輸出,得到想要的結果。

複雜度分析:因爲只需要遍歷一遍字符串,因此時間複雜度爲 O(n) 。只需要定義常數個變量,因此空間複雜度爲 O(1) 。

 

代碼

class Solution:
    def convert(self, s: str, numRows: int) -> str:
        if numRows == 1:
            return s

        pool = [list() for i in range(numRows)]
        down = False
        pool_index = 0
        for char in s:
            if pool_index == numRows - 1 or pool_index == 0:
                down = not down
            pool[pool_index].append(char)
            if down:
                pool_index += 1
            else:
                pool_index -= 1

        result = "".join(["".join(element) for element in pool])
        return result

 

代碼走讀

class Solution:
    def convert(self, s: str, numRows: int) -> str:
        // 如果給定的行數只有1行,那麼只需要將原字符串返回
        if numRows == 1:
            return s

        // 定義存儲每一行字符的二維列表
        pool = [list() for i in range(numRows)]

        // down變量用來定義此時模擬Z字型遊標指針的走向(False爲向上,True爲向下)
        down = False

        // 遊標指針變量,表示當前所在的行數
        pool_index = 0
        for char in s:
            // 如果遊標抵達邊界,需要改變方向
            if pool_index == numRows - 1 or pool_index == 0:
                down = not down

            // 對應行添加字符
            pool[pool_index].append(char)
            if down:
                pool_index += 1
            else:
                pool_index -= 1

        // 按照每一行字符依次拼接的方式輸出結果
        result = "".join(["".join(element) for element in pool])
        return result


// 自測用例
if __name__ == '__main__':
    s = Solution()
    result = s.convert("LEETCODEISHIRING", 3)
    print(result)

 

傳送門

LeetCode試題連接

range()函數

list()函數

list.append()方法

str.join()方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章