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跟蹤當前處在哪一行阱当,按照這個模式把所有的字符填到對應的行上即可。

代碼

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
                
        # 取出結果
        res = ""
        for row in rows:
            res += row
        return res

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

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

新的思路

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

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

TBD...

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瞬女,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子努潘,更是在濱河造成了極大的恐慌诽偷,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疯坤,死亡現(xiàn)場離奇詭異报慕,居然都是意外死亡,警方通過查閱死者的電腦和手機压怠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門眠冈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人刑峡,你說我怎么就攤上這事洋闽⌒” “怎么了突梦?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長羽利。 經(jīng)常有香客問我宫患,道長,這世上最難降的妖魔是什么这弧? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任娃闲,我火速辦了婚禮,結果婚禮上匾浪,老公的妹妹穿的比我還像新娘皇帮。我一直安慰自己,他們只是感情好蛋辈,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布属拾。 她就那樣靜靜地躺著将谊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪渐白。 梳的紋絲不亂的頭發(fā)上尊浓,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機與錄音纯衍,去河邊找鬼栋齿。 笑死,一個胖子當著我的面吹牛襟诸,可吹牛的內(nèi)容都是我干的瓦堵。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼歌亲,長吁一口氣:“原來是場噩夢啊……” “哼谷丸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起应结,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤刨疼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鹅龄,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體揩慕,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年扮休,在試婚紗的時候發(fā)現(xiàn)自己被綠了迎卤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡玷坠,死狀恐怖蜗搔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情八堡,我是刑警寧澤樟凄,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站兄渺,受9級特大地震影響缝龄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜挂谍,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一叔壤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧口叙,春花似錦炼绘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仗哨。三九已至,卻和暖如春铅辞,著一層夾襖步出監(jiān)牢的瞬間厌漂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工斟珊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留苇倡,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓囤踩,卻偏偏與公主長得像旨椒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子堵漱,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容

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