LeetCode 06 Z自行變換

2021-09-27 08:34:56 字數 1131 閱讀 9890

題目描述:

將乙個給定字串根據給定的行數,以從上往下、從左到右進行 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

方法一:按行排序

思路通過從左向右迭代字串,我們可以輕鬆地確定字元位於 z 字形圖案中的哪一行。

演算法我們可以使用 (,(s)) 個列表來表示 z 字形圖案中的非空行。

從左到右迭代 ss,將每個字元新增到合適的行。可以使用當前行和當前方向這兩個變數對合適的行進行跟蹤。

只有當我們向上移動到最上面的行或向下移動到最下面的行時,當前方向才會發生改變。

public string convert(string s,int numrows)

int currow=0;

boolean goingdown = false;

for(char c:s.tochararray())

stringbuffer ret=new stringbuffer();

for(stringbuilder row:rows)

return ret.tostring();

}

leetcode 06 Z 字形變換

leetcode題目鏈結 題目要求 將字串按照 的形狀排列。思路一 參考部落格 找出排列後的每一行中各個元素下表的關係 假設當前行數是r,總行數r,i n 表示某行第n個字母在原字串中的index,n從0開始 思路二 參考部落格 還是用二維陣列,只需要關心當前元素是向上儲存還是向下儲存 注意方向掉頭...

06 Z 字形變換

這道題目在解題時關鍵是要弄清楚 z字形排列 是怎麼一回事,僅僅根據numrow為3的情況可能看的不會 太明顯,把行數為4和行數為3的情況,做乙個對比,更容易找到解題思路。1 當不考慮對角線上的元素時,完成可以看成是數字是一列一列的跳轉,且跳轉距離為numrow 2 2 2 再去考慮計算對角線的元素的...

06 Z字形變換

題目好像開始越來越難了,這道題一開始毫無頭緒,只知道了每一行用乙個slice,然後依次把字元放進slice中,然後突然發現好像可以找規律,如果分成n行,那麼每乙個迴圈都是2n 2個元素,這道題最重要的就是要知道字元應該放在哪個slice裡面。假如要分成4行,那麼一次包括 tmp 2 4 2 6個元素...