題目描述
將一個給定字符串根據(jù)給定的行數(shù)先朦,以從上往下草穆、從左到右進行 Z 字形排列戚揭。
比如輸入字符串為 "LEETCODEISHIRING" 行數(shù)為 3 時,排列如下:
L C I R
E T O E S I I G
E D H N
之后儒搭,你的輸出需要從左往右逐行讀取吠架,產(chǎn)生出一個新的字符串,比如:"LCIRETOESIIGEDHN"搂鲫。
請你實現(xiàn)這個將字符串進行指定行數(shù)變換的函數(shù):
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
思路
維護一個布爾型變量godown傍药,以及一個int型的變量curRow代表當(dāng)前字符應(yīng)該放在第幾行,當(dāng)curRow到達0或者行數(shù)-1時魂仍,代表著需要變向拐辽,也就是說godown取反,而curRow每次加1或者減1取決于godown是true還是false擦酌。使用StringBuilder來進行字符的append俱诸。
代碼
class Solution {
public String convert(String s, int numRows) {
if (numRows==1) return s;
List<StringBuilder> list=new ArrayList<>();
for (int i=0;i<numRows;i++){
list.add(new StringBuilder());
}
int curRow=0;
boolean godown=false;
for (char c:s.toCharArray()){
list.get(curRow).append(c);
if (curRow==0||curRow==numRows-1){
godown=!godown;
}
curRow+=godown?1:-1;
}
StringBuilder ret=new StringBuilder();
for (StringBuilder sb:list){
ret.append(sb);
}
return ret.toString();
}
}