这道题目在解题时关键是要弄清楚“z字形排列”是怎么一回事,仅仅根据numRow为3的情况可能看的不会
太明显,把行数为4和行数为3的情况,做一个对比,更容易找到解题思路。
1)当不考虑对角线上的元素时,完成可以看成是数字是一列一列的跳转,且跳转距离为numRow * 2 - 2;
2) 再去考虑计算对角线的元素的位置。
public String convert(String s, int numRows) {
int k = 0;
int offset = numRows * 2 - 2;
if (offset <= 0) {
return s;
}
StringBuilder builder = new StringBuilder();
for (int i=0; i<numRows; i++) {
k = i;
if (i == 0 || i == numRows-1) {
while (k < s.length()) {
builder.append(s.charAt(k));
k += offset;
}
} else {
while (k < s.length()) {
builder.append(s.charAt(k));
int m = numRows - 2; // 对角线元素个数
int n = numRows - i + m - i;
if (k + n < s.length())
builder.append(s.charAt(k+n));
k += offset;
}
}
}
return builder.toString();
}