將字符串按之字形(Z 字形)排列在 nRows 行中,逐行讀取生成新字符串。例:
"PAYPALISHIRING", 3 行 →
P A H N
A P L S I I G
Y I R
輸出 "PAHNAPLSIIGYIR"。
第 0 行與第 nRows-1 行:字符間隔固定為 2*nRows - 2。
中間行 i:交替間隔 2*(nRows-1-i) 和 2*i。
public String convert(String s, int nRows) {
if (nRows <= 1 || s.length() <= nRows) return s;
StringBuilder res = new StringBuilder();
for (int i = 0; i < nRows; i++) {
int index = i;
res.append(s.charAt(index));
boolean flag = true;
for (int k = 0; index < s.length(); k++) {
if (i == 0 || i == nRows - 1) index += 2 * nRows - 2;
else {
if (flag) index += 2 * (nRows - 1 - i);
else index += 2 * i;
flag = !flag;
}
if (index < s.length()) res.append(s.charAt(index));
}
}
return res.toString();
}
時間 O(n),空間 O(n)(輸出字符串)。單次遍歷,無需額外矩陣。