LeetCode刷題系列 6

2021-10-24 07:22:38 字數 1436 閱讀 7865

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

比如輸入字串為"leetcodeishiring"行數為 3 時,排列如下:

l   c   i   r

e t o e s i i g

e d h n

之後,你的輸出需要從左往右逐行讀取,產生出乙個新的字串,比如:"lciretoesiigedhn"

請你實現這個將字串進行指定行數變換的函式:

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

直接的方法就是使用乙個二維陣列來進行題目描述的排列。

class

solution

}else

}for

(auto

& i:matrix)

}return res;}}

;//計算行數花費了很多操作,但是不考慮記憶體占用的話,可以直接設定列數為len

考察二維陣列的排列方式,我們可以看到,其實我們不需要那麼複雜的去排列字元的位置。我們只需要記錄下每一行的字元的先後順序即可,因為我們最終輸出的是從左往右的字串行。

可以總結出,我們只需要``numrows```個字串(s0.

..sn

umro

ws−1

s_0...s_

s0​...

snum

rows

−1​,對輸入字串的每個字元,依次新增到s0.

...s

numr

ows−

1s_0....s_

s0​...

.snu

mrow

s−1​

然後反序,再正序…如此往復即可。

class

solution

for(

auto c :strs)

return res;}}

;

leetcode刷題系列

題目 輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。解題思路 如果乙個整數不為0,那麼這個整數至少有一位是1。如果我們把這個整數減1,那麼原來處在整數最右邊的1就會變為0,原來在1後面的所有的0都會變成1 如果最右邊的1後面還有0的話 其餘所有位將不會受到影響。舉個例子 乙個二進...

LeetCode刷題系列1

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...

LeetCode刷題系列4

給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 示例 2 nums1 1,2 ...