題目描述:
將乙個給定字串根據給定的行數,以從上往下、從左到右進行 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個元素...