终于ac了,写的有点繁琐,不过可以参考。
public String convert(String s, int numRows) {
if(numRows == 1) {
return s;
}
//估计出column大小;
int column = (1 + s.length() / (2*numRows - 2))*(numRows - 1);
char[][] charArr = new char[numRows][column];
//用来记录第num个字母;
int num = 0;
int i = 0;
int j = 0;
//这里表示两种类型的mode;
//0表示向下,1表示斜向上;
int mode = 0;
while(num < s.length()) {
if(mode == 0){
while(i < numRows && num < s.length()) {
charArr[i][j] = s.charAt(num);
++i;
++num;
}
i-=2;
mode = 1;
++j;
}else{
while(i >= 0 && num < s.length()) {
charArr[i][j] = s.charAt(num);
--i;
++j;
++num;
// System.out.println(num);
}
//此时要将num,j还原;
//--num;
--j;
mode = 0;
i = 1;
}
}
StringBuffer res = new StringBuffer("");
for(int k = 0;k < numRows; ++k) {
for(int l = 0;l < charArr[0].length; ++l){
if(charArr[k][l] != '\0'){
res.append(charArr[k][l]);
}
}
}
return res.toString();
}
1 判断 numRows == 1时直接输出s;
2 判断字符串是否为空时用
charArr[k][l] != '\0'
3 //估计出column大小;
int column = (1 + s.length() / (2*numRows - 2))*(numRows - 1);
4期间改了好多次,还是太渣。