6. ZigZag Conversion
这其实是道数学题,在纸上画画很容易看出规律。关键在于找出当前元素的下一个元素是什么。
对于第一行和最后一行,元素之间的下标有固定的间隔。
对于中间的几行,除了有固定间隔的元素外,还跟当前是第几行有关。
剩下的就是注意一些边界条件就好了。
public class Solution {
public String convert(String s, int numRows) {
// 一些边界条件
if (s == null)
return null;
if (s.length() <= numRows)
return s;
if (numRows <= 1) {
return s;
}
int step = numRows * 2 - 2; // 第一行和最后一行的,元素之间的间隔
StringBuilder sb = new StringBuilder();
// 依次处理每行的元素
for (int i = 0; i < numRows; i++) {
int next = i;
while (next < s.length()) {
sb.append(s.charAt(next));
next += step;
if (i != 0 && i != numRows - 1) {
// 如果不是第一行和最后一行,还要额外加上一个元素
// 而这个元素的下标和当前是第几行有关
int tmp = next - i * 2;
if (tmp < s.length()) {
sb.append(s.charAt(tmp));
}
}
}
}
return sb.toString();
}
}