思路:将字符串改为数字,通过数字寻找规律,例如:
偶数行:
0 6 12
1 5 7 11
2 4 8 10
3 9
奇数行:
0 4 8
1 3 5 7
2 6
可以发现不管是奇数列还是偶数列,第一行和最后一行的数字后一个总是前一个的下标加上(numRows*2-2)
然后就是中间行数,可以发现偶数列依然符合上述规律,而奇数列为偶数列 - numRows * 2;
public class Solution {
public String convert(String s, int numRows) {
if(numRows <=1 || s.length()==0){
return s;
}
char[] array = s.toCharArray();
StringBuilder builder = new StringBuilder();
int index;
for(int i = 0; i < numRows; i++){
index = i;
//由于i有可能大于字符个数,即numRows有可能大于字符个数
for(int j = 0; j < array.length && i < array.length; j++ ){
//第一列的下标为行数递增
builder.append(array[index]);
//下面开始计算每一行的下一个字符的下标,
if(i == 0 || i == numRows-1){
index += numRows * 2 - 2;
}else{
//中间行数分别判断奇数列和偶数列
if((j+1) % 2 != 0){
index += (numRows*2 -2) - i*2;
}else{
index = index + i*2;
}
}
//判断下标是否超过字符串的长度,以此条件来终止循环
if(index >= array.length){
break;
}
}
}
return builder.toString();
}
}