6. Z 字形变换
就简单模拟。
使用cur记录当前数组所在位置,然后如果是向下递增,则每次cur++,若是到底,则反向。同理,当向上时候,就cur--,若是到顶,则反向。
有趣的点是代码重构时候如何简化代码,同时提高可读性。
public String convert(String s, int numRows) {
if (numRows == 1) return s;
StringBuilder[] builders = new StringBuilder[numRows];
for (int i = 0; i < builders.length; i++) builders[i] = new StringBuilder();
boolean down = false;
int cur = 0;
for (int i = 0; i < s.length(); i++) {
builders[cur].append(s.charAt(i));
if (i == 0 || i == numRows - 1) down = !down;
cur += down ? 1 : -1;
}
StringBuilder builder = new StringBuilder();
for (StringBuilder i : builders) builder.append(i);
return builder.toString();
}