错太多了,一开始找规律就找错了,想一行一行的取。后来想不用找规律了,直接每行开一个string,按曲线一个一个char赋值给对应的string。但是if else又写错了很多次。
1. string数组声明之后要对每个string初始化,否则会出现怪东西。
2.边界条件是nRows等于1的情况,以及s.length 小于nRows的情况。
3.找规律的话省空间,就是要计算好每行每两个数之间的gap,懒得写了。
public class Solution {
public String convert(String s, int nRows) {
if ( s == null)
return null;
String [] strs = new String [nRows];
for ( int i = 0; i < nRows; i ++){
strs[ i ] = "";
}
int row = 0;
boolean down = true;
if ( nRows == 1)
return s;
for ( int i = 0; i < s.length(); i ++ ){
if ( down ){
if(row < nRows){
strs[row] += s.charAt(i);
row ++;
}
if ( row == nRows) {
down = false;
row = nRows - 2;
}
}
else{
if ( row >= 0){
strs[row] += s.charAt(i);
row --;
}
if ( row < 0) {
down = true;
row = 1;
}
}
}
for ( int i = 1; i < nRows; i ++ ){
if ( strs[i] != null)
strs[0] += strs[i];
}
return strs[0];
}
}
找规律的写法以后补上