Leetcode 6 ZigZag字符串

Time: 2019-08-01
語言:Python3
難度:中等

題目描述

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

比如輸入字符串為"LEETCODEISHIRING" 行數(shù)為 3 時,排列如下:

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

之后,你的輸出需要從左往右逐行讀取,產(chǎn)生出一個新的字符串,比如:"LCIRETOESIIGEDHN"。

請你實現(xiàn)這個將字符串進行指定行數(shù)變換的函數(shù):

string convert(string s, int numRows);
示例 1:

輸入:s = "LEETCODEISHIRING", numRows = 3
輸出: "LCIRETOESIIGEDHN"
示例 2:

輸入: s = "LEETCODEISHIRING", numRows = 4
輸出: "LDREOEIIECIHNTSG"
解釋:

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

思路

一種簡單但是耗費空間的做法是,用代碼模擬字符的填充過程。

我們首先定義一個數(shù)組,按行存儲元素。注意,如果字符串中的字符個數(shù)小于numRows,則一個豎行都走不完的,這在定義數(shù)組大小時候需要注意。

如何定義已知大小的數(shù)組?

答案是用生成式來寫。

rows = ['' for i in range(min(len(s), numRows))]

用一個變量goingDown來表示行走的方向,在遇到豎行的末尾時,掉頭向上。用curRow跟蹤當前處在哪一行,按照這個模式把所有的字符填到對應(yīng)的行上即可。

代碼

class Solution:
    def convert(self, s: str, numRows: int) -> str:
        if numRows == 1:
            return s
        # 按行存儲數(shù)據(jù)的對象
        rows = ['' for i in range(min(len(s), numRows))]
        curRow = 0
        goingDown = False
        
        for c in s:
            rows[curRow] += c
            if curRow == 0 or curRow == numRows - 1 :
                goingDown = not goingDown
            if goingDown:
                curRow += 1
            else:
                curRow -= 1
                
        # 取出結(jié)果
        res = ""
        for row in rows:
            res += row
        return res

理解了上面的思路,再看這個題的代碼就很自然,也很簡單了。

時間復雜度:O(n)
空間復雜度:O(n)

新的思路

算法題,除了掌握基本的算法寫法外,不斷優(yōu)化算法的心理也很重要,不要滿足于當前的算法復雜度,精益求精。

自己想不到的就去看別人的思路,一定要有這種習慣。

TBD...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 4,044評論 0 2
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,716評論 0 5
  • 二維數(shù)組 所謂二維數(shù)組就是一個一維數(shù)組的每個元素又被聲明為一 維數(shù)組,從而構(gòu)成二維數(shù)組. 可以說二維數(shù)組是特殊的一...
    極客江南閱讀 2,497評論 0 10
  • 1、用C語言實現(xiàn)一個revert函數(shù),它的功能是將輸入的字符串在原串上倒序后返回。 2、用C語言實現(xiàn)函數(shù)void ...
    希崽家的小哲閱讀 6,691評論 0 12
  • 數(shù)組在程序設(shè)計中,為了處理方便, 把具有相同類型的若干變量按有序的形式組織起來。這些按序排列的同類數(shù)據(jù)元素的集合稱...
    朱森閱讀 4,271評論 2 13

友情鏈接更多精彩內(nèi)容