//按行访问(每一行放入单独的容器)
class Solution {
public String convert(String s, int numRows) {
if(s == null || s.length() == 0 || numRows <=1 || numRows > s.length()) return s;
StringBuilder[] array = new StringBuilder[numRows];
for(int i = 0; i < array.length; i++){
array[i] = new StringBuilder();
}
int dir = 1;
int index = 0;
for (char c : s.toCharArray()) {
array[index].append(c);
index += dir;
if(index == 0 || index == numRows - 1){
dir = -dir;
}
}
StringBuilder result = new StringBuilder();
for(int i = 0; i < array.length; i++){
result.append(array[i]);
}
return result.toString();
}
}
题解过程:
s = "LEETCODEISHIRING", numRows = 3 => "PAHNAPLSIIGYIR"
L 放入第一个容器 E 放入第二个容器 E放入第三个容器 此时index = 2 转换方向 -1
T 放入第二个容器 C放入第一个容器 此时index = 0 转换方向 +1
O 放入第二个容器 D放入第三个容器 此时index = 2 转换方向 =1
......
最终第一个容器有L C I R
最终第二个容器有E T O E S I I G
最终第三个容器有E D H N
连接起来就是LCIRETOESIIGEDHN
时间复杂度:O(n)
空间复杂度:O(n)