亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

LeetCode.6 Z 字形變換(zigzag-conversion)(JS)

cheukyin / 1739人閱讀

摘要:看到這道題總覺(jué)得眼熟,做完之后恍然大悟,這不就是小學(xué)數(shù)學(xué)做的找規(guī)律一題目字形變換將一個(gè)給定字符串根據(jù)給定的行數(shù),以從上往下從左到右進(jìn)行字形排列。一當(dāng)然是因?yàn)樽罱鼘?shí)在太忙了捂臉,幾乎周周誰(shuí)遭得住。

看到這道題總覺(jué)得眼熟,做完之后恍然大悟,這不就是小學(xué)數(shù)學(xué)做的找規(guī)律
一、題目

Z 字形變換:

將一個(gè)給定字符串根據(jù)給定的行數(shù),以從上往下、從左到右進(jìn)行 Z 字形排列。
比如輸入字符串為 "LEETCODEISHIRING" 行數(shù)為 3 時(shí),排列如下:
L???C???I????R
E T O E S ?I ?I ??G
E???D???H???N
(這個(gè)字符排列看不懂的話推薦去看一下原題,原題的調(diào)整示例比較清晰)
之后,你的輸出需要從左往右逐行讀取,產(chǎn)生出一個(gè)新的字符串,比如:"LCIRETOESIIGEDHN"。
請(qǐng)你實(shí)現(xiàn)這個(gè)將字符串進(jìn)行指定行數(shù)變換的函數(shù):
string convert(string s, int numRows);
示例 1:
輸入: s = "LEETCODEISHIRING", numRows = 3
輸出: "LCIRETOESIIGEDHN"
示例 2:
輸入: s = "LEETCODEISHIRING", numRows = 4
輸出: "LDREOEIIECIHNTSG"
二、我的答案

???????首先分析一下題目,輸出內(nèi)容就是重新排列之后的各行相加,那么問(wèn)題變成按照題干規(guī)律排列,序號(hào)為n的字符在第幾行。
???????在示例1中,LEETCODEISHIRING行數(shù)為3時(shí),各個(gè)字符分別在1232-1232-1232-1232行,很明顯應(yīng)該存在某種規(guī)律,可以把字符串分成幾組,然后每組按照這種規(guī)律push到不同行中,然后各行相加得出目標(biāo)字符串,思路理清,代碼如下

/**
 * @param {string} s
 * @param {number} numRows
 * @return {string}
 */
var convert = function(s, numRows) {
  const perGroup = numRows > 1 ? (numRows - 2) * 2 + 2 : 1
  const result = []
  let i
  for(i = 0; i < numRows; i++) {
    result[i] = []
  }
  for(i = 0; i < s.length; i++) {
    result[i % perGroup < numRows ? i % perGroup : numRows - (i % perGroup - numRows + 2)].push(s[i])
  }
  let resultStr = ""
  result.forEach(item => {
    item.forEach(str => {
      resultStr += str
    })
  })
  return resultStr
};

???????最后各行的數(shù)組都算出來(lái)了,轉(zhuǎn)成字符串的操作想用的數(shù)組flat然后再join的,但是leetCode的編譯環(huán)境好像不支持flat,就只能含淚用這種循環(huán)的方法了,最后運(yùn)行用時(shí)擊敗88.52%,內(nèi)存消耗擊敗33.66%,但是我不知道怎么降低內(nèi)存消耗/捂臉

三、優(yōu)秀答案
/**
 * @param {string} s
 * @param {number} numRows
 * @return {string}
 */
var convert = function(s, numRows) {
    var map = {};
    var j = 0;
    if (numRows <= 1) {
        return s;
    }
    var boo = true;
    for (var i = 0; i < s.length; i++) {
        if (!map[j]) {
            map[j] = "";
        }
        map[j] = map[j] + s[i];
        if (boo) {
            j++;
            if (j >= numRows) {
                j = j - 2;
                boo = false;
            }
        } else {
            j--;
            if (j < 0) {
                boo = true;
                j = j + 2;
            }
        }
        
    }
    s = "";
    Object.keys(map).forEach(i => {
        s = s + map[i];
    });
    return s;
    
};

???????這段代碼我并沒(méi)有仔細(xì)看,因?yàn)榭此麑?duì)j+2 - 2的這種操作還有最后相加的手段,都和我差不多,我復(fù)制下來(lái)再次提交,用時(shí)擊敗91.90%,內(nèi)存消耗擊敗49.13%。這是我和優(yōu)秀答案最近的一次/滑稽,甚至我個(gè)人感覺(jué)我的代碼的可閱讀性要比他的更好,代碼寫出來(lái)就是給別人看的嘛(開(kāi)始瘋狂自我安慰)

四、路漫漫其修遠(yuǎn)兮

???????本來(lái)說(shuō)一周1-2道題的,但是這道題距離上次都快兩個(gè)月了。一當(dāng)然是因?yàn)樽罱鼘?shí)在太忙了/捂臉,幾乎周周997誰(shuí)遭得住。還有就是本來(lái)預(yù)計(jì)寫的第4題沒(méi)思路,隨便瀏覽的過(guò)程中感覺(jué)第42題比較有意思就去做那個(gè),結(jié)果陷入了“這道題好難啊放一放吧去工作一會(huì)兒——工作好累啊去刷到題緩一緩——這道題好難啊放一放吧去工作一會(huì)兒”的惡性循環(huán),現(xiàn)在這道第六題其實(shí)是我心態(tài)爆炸之后拿來(lái)找自信的,近期工作上的活也終于步入尾聲了,重整旗鼓。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/104252.html

相關(guān)文章

  • python LeetCode 6.Z變換

    摘要:將一個(gè)給定字符串根據(jù)給定的行數(shù),以從上往下從左到右進(jìn)行字形排列。請(qǐng)你實(shí)現(xiàn)這個(gè)將字符串進(jìn)行指定行數(shù)變換的函數(shù)示例輸入輸出示例輸入輸出解釋題解找出規(guī)律然后按行讀取,不斷的獲取同行下一個(gè)元素在整個(gè)字符串上的位置。 將一個(gè)給定字符串根據(jù)給定的行數(shù),以從上往下、從左到右進(jìn)行?Z 字形排列。 比如輸入字符串為 LEETCODEISHIRING?行數(shù)為 3 時(shí),排列如下: L C I R...

    lentrue 評(píng)論0 收藏0
  • LeetCode6.Z字形變換 JavaScript

    摘要:字形變換將一個(gè)給定字符串根據(jù)給定的行數(shù),以從上往下從左到右進(jìn)行字形排列。請(qǐng)你實(shí)現(xiàn)這個(gè)將字符串進(jìn)行指定行數(shù)變換的函數(shù)示例輸入輸出示例輸入輸出解釋答案參考 LeetCode6.Z字形變換 JavaScript 將一個(gè)給定字符串根據(jù)給定的行數(shù),以從上往下、從左到右進(jìn)行 Z 字形排列。比如輸入字符串為 LEETCODEISHIRING 行數(shù)為 3 時(shí),排列如下: L C I R E...

    tuniutech 評(píng)論0 收藏0
  • 6-9月技術(shù)文章匯總

    摘要:分布式的管理和當(dāng)我在談?wù)摷軜?gòu)時(shí)我在談啥狀態(tài)碼詳解無(wú)狀態(tài)協(xié)議和請(qǐng)求支持哪些方法分層協(xié)議棧有哪些數(shù)據(jù)結(jié)構(gòu)運(yùn)用場(chǎng)景說(shuō)說(shuō)你常用的命令為什么要有包裝類面向?qū)ο蟮奶卣魇巧妒巧队惺裁春锰幭到y(tǒng)設(shè)計(jì)工程在線診斷系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)索引背后的數(shù)據(jù)結(jié)構(gòu)及算法原理軟技能 HTTP 【HTTP】分布式session的管理 【HTTP】Cookie和Session 【HTTP】當(dāng)我在談?wù)揜estFul架構(gòu)時(shí)我在談啥?...

    miya 評(píng)論0 收藏0
  • LeetCode 精選TOP面試題【51 ~ 100】

    摘要:有效三角形的個(gè)數(shù)雙指針最暴力的方法應(yīng)該是三重循環(huán)枚舉三個(gè)數(shù)字??偨Y(jié)本題和三數(shù)之和很像,都是三個(gè)數(shù)加和為某一個(gè)值。所以我們可以使用歸并排序來(lái)解決這個(gè)問(wèn)題。注意因?yàn)闅w并排序需要遞歸,所以空間復(fù)雜度為 ...

    Clect 評(píng)論0 收藏0
  • leetcode 6 ZigZag Conversion

    摘要:要求我們?cè)谥中沃匦屡帕羞@個(gè)字符串后,再按正常的從上到下,從左至右的順序輸出拼接好的字符串。因此對(duì)于每一個(gè)字符,我們判斷它應(yīng)該在哪一行,然后將它加到它所在行的字符序列的尾部。最后我們合并每一行,獲得最后的結(jié)果。 題目詳情 The string PAYPALISHIRING is written in a zigzag pattern on a given number of rows ...

    Dr_Noooo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<