最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【自留】N字形變換——兩個巧解

2023-09-01 16:43 作者:這是貓貓哦  | 我要投稿

先看題:

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

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

復(fù)制過來不好對齊,放截圖了

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


解法很多,暴力一下也很好寫,這里記錄兩個比較巧妙的解法。

一、通過直接構(gòu)造,來計算答案每一行的的字母所對應(yīng)的下標(biāo)


3個完整周期+一個不完整周期

觀察可得,對于一個行數(shù)為numRows的輸入,將每(numRows+numRows-2)個字符劃為一個周期。在每個周期內(nèi),第一行和第numRows行只有一個字符,中間的行會有兩個字符。這些字符所對應(yīng)的下標(biāo)都能通過行數(shù)和周期數(shù)計算出來(具體參數(shù)略),因此只需要遍歷行數(shù)作為外循環(huán),遍歷周期數(shù)作為內(nèi)循環(huán)即可。

需要注意的是要對最后一個不完整周期作額外判斷,防止越界。

時間復(fù)雜度:O(n) ,雖然看上去是雙重循環(huán),但實際上輸入串s的每個位置只被訪問過一次,本質(zhì)上是一個對輸入串s的遍歷。

空間復(fù)雜度:O(1),無需額外變量。


二、模擬N字形構(gòu)造過程

在這個解法中我們需要numRows個數(shù)組,用于記錄每一行的結(jié)果。

根據(jù)題意,在numRows = 3 時,在把輸入串s構(gòu)造成這樣N字型的時候,我們是遍歷s,把每一個字符挨個順著1、2、3行放入,再逆向回到2、1行,再逆向2、3行。

枚舉一下就是s[0]在第一行,s[1]在第二行,s[2]在第三行,s[3]在第二行,s[4]在第一行,s[5]在第二行,s[6]在第三行……

像這樣

因此我們只需要遍歷一遍s,并用一個變量記錄當(dāng)前到第幾行,把對應(yīng)的字符放到對應(yīng)的行的數(shù)組中儲存即可。這個用于記錄第幾行的變量,在到達numRows行和第一行的時候翻轉(zhuǎn)計數(shù),即可。通常額外采用一個flag=1或者-1來表示是在向上走還是在向下走。

需要注意的是數(shù)組下標(biāo)和對應(yīng)變量的相統(tǒng)一。

時間復(fù)雜度:O(n)?

空間復(fù)雜度:O(n)

總結(jié):方法1空間開銷更小,但代碼寫起來略微復(fù)雜;方法2簡單易懂,代碼量少,通過flag來記錄上下行的方法簡單有效且巧妙,但對應(yīng)需要空間開銷。

【自留】N字形變換——兩個巧解的評論 (共 條)

分享到微博請遵守國家法律
阿鲁科尔沁旗| 琼中| 罗城| 玉屏| 霍林郭勒市| 托里县| 景德镇市| 广河县| 宁安市| 红原县| 南安市| 朝阳区| 延川县| 宜城市| 余姚市| 聂拉木县| 六安市| 白水县| 兴海县| 翼城县| 类乌齐县| 两当县| 临澧县| 仁化县| 泸州市| 武邑县| 绥化市| 东宁县| 木里| 邵阳市| 香格里拉县| 望奎县| 北安市| 彰化市| 象山县| 张家港市| 侯马市| 文安县| 志丹县| 临泽县| 甘孜|